原创 進程返回值

#include <stdio.h> #include <stdlib.h> #include <sys/wait.h> int main() {p

原创 WinSock I/O系列1:多路複用I/O支持多Client的實現及效率討論

 1.       引言 多路複用I/O模型(select)是UNIX/LINUX用得的最多的一種I/O模型,在Windows下也 可做爲一種同步I/O使用。本文給出該I/O模型處理多Client的簡單(在主線程中)實現。 2.

原创 深入UNIX編程:一個簡單聊天室的兩種實現 (fcntl 和 select)

      在互聯網相當普及的今天,在互聯網上聊天對很多“網蟲”來說已經是家常便飯了。聊天室程序可以說是網上最簡單的多點通信程序。聊天室的實現方法有很多,但都是利用所謂的“多用戶空間”來對信息進行交換,具有典型的多路I/O的架構。一個

原创 linux socket的select函數例子

使用select函數可以以非阻塞的方式和多個socket通信。程序只是演示select函數的使用,功能非常簡單,即使某個連接關閉以後也不會修改當前連接數,連接數達到最大值後會終止程序。 1. 程序使用了一個數組fd_A,通信開始後把

原创 Linux select() 詳解

select系統調用是用來讓我們的程序監視多個文件句柄(file descriptor)的狀態變化的。程序會停在select這裏等待,直到被監視的文

原创 Linux下Socket編程中用send發送結構體

Linux網絡通信 Linux下多客戶端聊天軟件   最近在開發一個Linux下的聊天軟件,好久沒有做C語言的開發了,感覺到很多東西已經生疏了,這下又碰到用Socket傳遞結構體的問題,google了一下,發現也有不少朋友遇到同樣的問題,

原创 C語言 static的意義

在C語言中,static的字面意思很容易把我們導入歧途,其實它的作用有三條。 (1)第一個作用:隱藏。 當我們同時編譯多個文件時,所有未加static前綴的全局變量和函數都具有全局可見性。爲理解這句話,我舉例來說明。我們要同時編譯兩個

原创 Linux下的段錯誤(segmentation fault)產生的原因及調試方法

簡而言之,產生段錯誤就是訪問了錯誤的內存段,一般是你沒有權限,或者根本就不存在對應的物理內存,尤其常見的是訪問0地址. 一般來說,段錯誤就是指訪問的內存超出了系統所給這個程序的內存空間,通常這個值是由gdtr來保存的,他是一個48位的寄

原创 一個簡單的互斥鎖的例子

/*thread_example.c : c multiple thread programming in linux */ #include<stdio.h> #include<stdlib.h> #include<pt

原创 linux tcp併發式服務器應用SELECT函數編寫實例源代碼(轉載)

#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <sys/typ

原创 Linux網絡編程. 服務器模型(軟件工程節選)

   學習過《軟件工程》吧.軟件工程可是每一個程序員"必修"的課程啊.如果你沒有學習過, 建議你去看一看. 在這一章裏面,我們一起來從軟件工程的角度學習網絡編程的思想.在我們寫程序之前, 我們都應該從軟件工程的角度規劃好我們的軟件,這

原创 Linux進程間通信(一)——管道、信號量

一、Linux進程間通信方式 :有六種方式在兩個程序間傳遞信息           1、信號( Singal )         2、管道 ( Pipe ) 及有名管道         3、信號量 ( Semaphore )

原创 Linux進程間通信(二)——共享內存、消息隊列

一、共享內存                   最高效的進程間通信機制。多個進程共享一段內存。需要依靠某種同步機制,如互斥鎖或信號量。                    通常步驟爲:創建 -> 映射 -> 使用 -> 撤銷

原创 gch文件

gcc會預編譯頭文件成gch文件以節省編譯時間,如果改變了頭文件源碼而不重新編譯的話,gcc還會使用老的gch文件。但是當加選項-E只做預編譯的時,gcc會使用最新的頭文件源碼。這樣就產生了編譯生成的結果與預編譯生成的結果不一樣的現象。

原创 linux系統調用之ftok()

ftok原型如下:                         key_t ftok( char * fname, int id )                         fname就時你指定的文件(存在,可以訪問的)名