C、C++函數和類庫詳解(GCC版)(2014-4-23更新)
C、C++函數和類庫詳解(GCC版)(未完成)
整理者:高壓鍋
QQ:280604597
Email:280604597@qq.com
大家有什么不明白的地方,或者想要詳細了解的地方可以聯系我,我會認真回復的
1 函數庫
1.1 函數模板(未完成)
|
函數名稱 |
xxx |
|
頭文件 |
#include <xxx.h> #include <xxx.h> |
|
函數功能 |
函數主要功能說明。 |
|
函數聲明 |
類型 函數名 ( 類型 參數1, 類型 參數2, …… ); |
|
函數參數 |
參數1:[輸入|輸出|輸入&輸出],參數說明。 參數2:[輸入|輸出|輸入&輸出],參數說明。 …… |
|
返回值 |
返回值1:返回值說明。 返回值2:返回值說明。 …… |
|
錯誤碼 |
EXXXX:錯誤碼說明。 EXXXX:錯誤碼說明。 …… |
|
線程安全 |
是 或 否 或 未知 |
|
信號打斷 |
是 或 否 或 未知 |
|
原子操作 |
是 或 否 或 未知 |
|
其他說明 |
…… …… |
1.2 內存
1.2.1 realloc
|
函數名稱 |
realloc |
|
頭文件 |
#include <stdlib.h> |
|
函數功能 |
根據一塊已分配的舊內存,分配一塊新內存替換舊內存,或者直接分配一塊新內存。 |
|
函數聲明 |
void * realloc (void * ptr, size_t size); |
|
函數參數 |
ptr:舊內存的指針,如果為NULL,表示直接分配一塊新內存。 size:新內存的新大小,單位字節,如果為0,表示釋放舊內存。如果新內存比舊內存大,再把舊內存的數據全部拷貝過來,新內存的指針與舊內存可能一樣,也可能不一樣,擴大的部分里的數據是未被初始化過的。如果新內存比舊內存小,就會把舊內存截斷作為新內存,新內存的指針與舊內存一樣,被截斷的數據會丟失。如果新內存和舊內存一樣大,將不做任何改動。 |
|
返回值 |
NULL:失敗,舊內存的大小、指針和數據都不會改變。 其他:新內存的指針。 |
|
線程安全 |
是 或 否 或 未知 |
|
信號打斷 |
是 或 否 或 未知 |
|
其他說明 |
如果內存不再使用時,記得調用free()釋放內存,防止內存泄露。 分配的內存是全局的,在整個進程內有效。 舊內存必須是先前通過malloc (), calloc (), 或realloc ()分配的。 |
1.2.2 malloc
|
函數名稱 |
malloc |
|
頭文件 |
#include <stdlib.h> |
|
函數功能 |
分配一塊新內存。 |
|
函數聲明 |
void * malloc (size_t size); |
|
函數參數 |
size:新內存的大小,單位字節。 |
|
返回值 |
NULL:失敗。 其他:新內存的指針。 |
|
線程安全 |
是 或 否 或 未知 |
|
信號打斷 |
是 或 否 或 未知 |
|
其他說明 |
如果內存不再使用時,記得調用free()釋放內存,防止內存泄露。 分配的內存是全局的,在整個進程內有效。 新內存里的數據是未被初始化過的。 |
1.2.3 calloc
|
函數名稱 |
calloc |
|
頭文件 |
#include <stdlib.h> |
|
函數功能 |
分配一塊nmemb個子塊長度為size的內存,子塊與子塊之間是連續的,等同于malloc(nmemb*size)。 |
|
函數聲明 |
void * calloc (size_t nmemb, size_t size); |
|
函數參數 |
nmemb:多少個子塊。 size:每個子塊長度,單位字節。 |
|
返回值 |
NULL:失敗。 其他:內存的指針。 |
|
線程安全 |
是 |
|
信號打斷 |
否 |
|
其他說明 |
如果內存不再使用時,記得調用free()釋放內存,防止內存泄露。 分配的內存是全局的,在整個進程內有效。 內存里的數據是未被初始化過的。 |
1.2.4 malloc_usable_size
|
函數名稱 |
malloc_usable_size |
|
頭文件 |
#include <malloc.h> |
|
函數功能 |
用于獲取alloc()相關函數分配的內存的實際可用的長度,單位字節,此長度會大于等于分配內存時指定的長度。 |
|
函數聲明 |
size_t malloc_usable_size (void * ptr); |
|
函數參數 |
ptr:[輸入],alloc()相關函數分配的內存的指針,必須是有效指針,否則段錯誤。 |
|
返回值 |
正整數:內存的大小,單位字節。 |
|
錯誤碼 |
EXXXX:錯誤碼說明。 EXXXX:錯誤碼說明。 …… |
|
線程安全 |
未知 |
|
信號打斷 |
未知 |
|
其他說明 |
獲取到的長度會大于等于分配內存時指定的長度,例如:malloc_usable_size(malloc(10))返回值會大于等于10,具體大多少不一定,因為malloc()會內存對齊。 |
1.3 shell命令
1.3.1 popen(未完成)
|
函數名稱 |
popen |
|
頭文件 |
#include <stdio.h> |
|
函數功能 |
調用 fork 產生一個子進程,啟動一個 shell 以運行命令來開啟一個進程,并將這個進程的標準輸入或標準輸出重定向到一個文件指針。 |
|
函數聲明 |
FILE * popen (const char * command, const char * type); |
|
函數參數 |
command:用于啟動進程的shell命令的字符串。 type:重定向方式,"r"表示重定向標準輸出,"w"表示重定向標準輸入,只能選擇一個。 |
|
返回值 |
NULL:失敗,并設置errno。 其他:文件指針,這個進程的標準輸入或標準輸出被重定向到這個文件指針上。 |
|
錯誤碼 |
EXXXX:錯誤碼說明。 EXXXX:錯誤碼說明。 …… |
|
線程安全 |
是 |
|
信號打斷 |
是 或 否 或 未知 |
|
其他說明 |
返回的這個文件指針,在使用完后必須用pclose()函數關閉。 |
1.3.2 system(未完成)
|
函數名稱 |
system |
|
頭文件 |
#include <stdlib.h> |
|
函數功能 |
執行一個shell命令,調用/bin/sh -c "shell命令"來另啟動一個進程執行,命令執行完后此函數才返回。執行命令期間,SIGCHLD信號被鎖定,SIGINT和SIGQUIT信號被忽略。 |
|
函數聲明 |
int system (const char * command); |
|
函數參數 |
command:[輸入],要執行的shell命令的字符串。 |
|
返回值 |
返回值1:返回值說明。 返回值2:返回值說明。 …… |
|
線程安全 |
是 或 否 或 未知 |
|
信號打斷 |
是 或 否 或 未知 |
|
其他說明 |
此函數在使用/bin/sh啟動執行shell命令時,會丟掉調用進程的setuid和setgid位。 |
1.3.3 sleep
|
函數名稱 |
sleep |
|
頭文件 |
#include <unistd.h> |
|
函數功能 |
使當前線程暫停運行一段時間。 |
|
函數聲明 |
unsigned int sleep (unsigned int seconds); |
|
函數參數 |
seconds:[輸入],要暫停運行多少秒。 |
|
返回值 |
0:當前線程已經停止運行了指定的時間。 其他:剩余的時間(指定的時間減去實際暫停時間)。 |
|
線程安全 |
是 |
|
信號打斷 |
是 |
|
其他說明 |
有些操作系統內核是使用pause()函數和alarm()函數實現的sleep()函數,一旦進程收到SIGALRM信號,所有進程的sleep()函數都會被打斷,所以不推薦使用此函數,推薦使用select()函數或者poll()函數等。 |
1.4 文件描述符
1.4.1 打開或創建文件
1.4.1.1 open(未完成)
|
函數名稱 |
open |
|
頭文件 |
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> |
|
函數功能 |
打開指定的文件,同時還可以創建文件。 |
|
函數聲明 |
int open (const char * pathname, int flags); |
|
函數參數 |
pathname:[輸入],要打開的文件的路徑,可以是相對或絕對的路徑。 flags:[輸入],打開文件時使用的模式和權限。可以是(用"|"選擇多個): O_RDONLY:以只讀方式打開文件。 O_WRONLY:以只寫方式打開文件。 O_RDWR:以可讀寫方式打開文件。 以上三種標記只能使用一個,以下的標記沒有限制。 O_CREAT:如果使用此標記,表示如果要打開的文件不存在則創建并打開該文件,如果要打開的文件存在,則直接打開;如果不使用此標記,表示如果要打開的文件不存在,則立即返回失敗并設置ENOENT錯誤碼,如果要打開的文件存在,則直接打開。 O_EXCL:如果使用此標記,并使用O_CREAT標記,表示如果要打開的文件不存在,則創建并打開該文件,如果要打開的文件存在,則立即返回失敗并設置EEXIST錯誤碼。此外,若O_CREAT與O_EXCL同時設置,并且欲打開的文件為符號連接,則會打開文件失敗。如果使用此標記,必須同時使用O_CREAT標記。此標記一般用于檢測文件是否是本進程創建的。 O_NOCTTY:如果使用此標記,表示如果要打開的文件為終端機設備時,則不會將該終端機當成進程控制終端機。 O_TRUNC:如果使用此標記,并使用可寫方式打開,表示把要打開的文件的長度清為0,而原來存于該文件的數據也會消失。 O_APPEND:如果使用此標記,表示每次寫文件時都會從文件末尾開始,在NFS文件系統上,如果多個進程同時追加寫入同一個文件時,有可能會導致寫入結果錯亂,因為在此文件系統上的追加功能不是原子操作;如果不使用此標記,表示每次寫文件時從文件指針開始。 O_NONBLOCK:如果使用此標記,表示以非阻塞方式操作打開文件,也就是無論有無數據讀取或等待,都會立即返回進程之中。 O_NDELAY:同O_NONBLOCK。 O_SYNC:以同步的方式打開文件。 O_NOFOLLOW:如果參數pathname 所指的文件為一符號連接,則會令打開文件失敗。 O_DIRECTORY:如果參數pathname 所指的文件并非為一目錄,則會令打開文件失敗。 此為Linux2.2以后特有的旗標,以避免一些系統安全問題。參數mode 則有下列數種組合,只有在建立新文件時才會生效,此外真正建文件時的權限會受到umask值所影響,因此該文件權限應該為(mode-umaks)。 S_IRWXU:00700 權限,表示該文件所有者具有可讀、可寫及可執行的權限。 S_IRUSR:00400權限,表示該文件所有者具有可讀取的權限。 S_IWUSR:00200 權限,表示該文件所有者具有可寫入的權限。 S_IXUSR:00100 權限,表示該文件所有者具有可執行的權限。 S_IRWXG:00070權限,表示該文件所有組具有可讀、可寫及可執行的權限。 S_IRGRP:00040 權限,表示該文件所有組具有可讀的權限。 S_IWGRP:00020權限,表示該文件所有組具有可寫入的權限。 S_IXGRP:00010 權限,表示該文件所有組具有可執行的權限。 S_IRWXO:00007權限,表示其他用戶具有可讀、可寫及可執行的權限。 S_IROTH:00004 權限,表示其他用戶具有可讀的權限 S_IWOTH:00002權限,表示其他用戶具有可寫入的權限。 S_IXOTH:00001 權限,表示其他用戶具有可執行的權限。 |
|
返回值 |
-1:失敗,并設置errno錯誤碼變量。 其他:被打開文件的文件描述符。 |
|
錯誤碼 |
EXXXX:錯誤碼說明。 EXXXX:錯誤碼說明。 …… |
|
線程安全 |
是 或 否 或 未知 |
|
信號打斷 |
是 或 否 或 未知 |
|
其他說明 |
…… …… |
1.4.1.2 fopen(未完成)
|
函數名稱 |
fopen |
|
頭文件 |
#include <xxx.h> #include <xxx.h> |
|
函數功能 |
打開文件,同時還可以創建文件。 |
|
函數聲明 |
FILE * fopen ( const char * filename, const char * mode ); |
|
函數參數 |
filename:[輸入],參數說明。 mode:[輸入|輸出|輸入&輸出],參數說明。 |
|
返回值 |
返回值1:返回值說明。 返回值2:返回值說明。 …… |
|
錯誤碼 |
EXXXX:錯誤碼說明。 EXXXX:錯誤碼說明。 …… |
|
線程安全 |
是 或 否 或 未知 |
|
信號打斷 |
是 或 否 或 未知 |
|
原子操作 |
是 或 否 或 未知 |
|
其他說明 |
…… …… |
1.4.2 讀取文件
1.4.2.1 fread(未完成)
|
函數名稱 |
fread |
|
頭文件 |
#include <xxx.h> #include <xxx.h> |
|
函數功能 |
函數主要功能說明。 |
|
函數聲明 |
類型 函數名 (類型 參數1, 類型 參數2, ……); |
|
函數參數 |
參數1:[輸入|輸出|輸入&輸出],參數說明。 參數2:[輸入|輸出|輸入&輸出],參數說明。 …… |
|
返回值 |
返回值1:返回值說明。 返回值2:返回值說明。 …… |
|
錯誤碼 |
EXXXX:錯誤碼說明。 EXXXX:錯誤碼說明。 …… |
|
線程安全 |
是 或 否 或 未知 |
|
信號打斷 |
是 或 否 或 未知 |
|
其他說明 |
…… …… |
1.4.3 寫入文件
1.4.3.1 fprintf(未完成)
|
函數名稱 |
xxx |
|
頭文件 |
#include <xxx.h> #include <xxx.h> |
|
函數功能 |
函數主要功能說明。 |
|
函數聲明 |
類型 函數名 (類型 參數1, 類型 參數2, ……); |
|
函數參數 |
參數1:[輸入|輸出|輸入&輸出],參數說明。 參數2:[輸入|輸出|輸入&輸出],參數說明。 …… |
|
返回值 |
返回值1:返回值說明。 返回值2:返回值說明。 …… |
|
錯誤碼 |
EXXXX:錯誤碼說明。 EXXXX:錯誤碼說明。 …… |
|
線程安全 |
是 或 否 或 未知 |
|
信號打斷 |
是 或 否 或 未知 |
|
其他說明 |
…… …… |
1.4.3.2 vprintf(未完成)
|
函數名稱 |
xxx |
|
頭文件 |
#include <xxx.h> #include <xxx.h> |
|
函數功能 |
函數主要功能說明。 |
|
函數聲明 |
類型 函數名 (類型 參數1, 類型 參數2, ……); |
|
函數參數 |
參數1:[輸入|輸出|輸入&輸出],參數說明。 參數2:[輸入|輸出|輸入&輸出],參數說明。 …… |
|
返回值 |
返回值1:返回值說明。 返回值2:返回值說明。 …… |
|
錯誤碼 |
EXXXX:錯誤碼說明。 EXXXX:錯誤碼說明。 …… |
|
線程安全 |
是 或 否 或 未知 |
|
信號打斷 |
是 或 否 或 未知 |
|
其他說明 |
…… …… |
1.4.4 標準輸入、輸出和出錯
1.4.4.1 ungetc
|
函數名稱 |
ungetc |
|
頭文件 |
#include <stdio.h> |
|
函數功能 |
把一個字符退回到標準輸入流中的第一個字符,下一次將讀出此字符,不會將此字符寫到文件中和設備上,只將字符退回到標準I/O庫的流緩存區中,此字符不能被正在調用的輸入流函數讀出。 |
|
函數聲明 |
int ungetc (int c, FILE * stream); |
|
函數參數 |
c:要退回的字符,只能是ASCII碼的字符,值為0-255。 stream:輸入流文件指針stdin。 |
|
返回值 |
EOF:失敗。 其他:退回的字符c參數。 |
|
錯誤碼 |
|
|
線程安全 |
未知 |
|
信號打斷 |
未知 |
|
其他說明 |
|
1.4.4.2 printf(未完成)
|
函數名稱 |
xxx |
|
頭文件 |
#include <xxx.h> #include <xxx.h> |
|
函數功能 |
函數主要功能說明。 |
|
函數聲明 |
類型 函數名 (類型 參數1, 類型 參數2, ……); |
|
函數參數 |
參數1:[輸入|輸出|輸入&輸出],參數說明。 參數2:[輸入|輸出|輸入&輸出],參數說明。 …… |
|
返回值 |
返回值1:返回值說明。 返回值2:返回值說明。 …… |
|
錯誤碼 |
EXXXX:錯誤碼說明。 EXXXX:錯誤碼說明。 …… |
|
線程安全 |
是 或 否 或 未知 |
|
信號打斷 |
是 或 否 或 未知 |
|
其他說明 |
…… …… |
1.4.5 監測文件
1.4.5.1 select(未完成)
|
函數名稱 |
select |
|
頭文件 |
#include <sys/select.h> #include <sys/time.h> #include <sys/types.h> #include <unistd.h> |
|
函數功能 |
阻塞檢查一個或多個文件描述符是否處于可讀或可寫或異常的狀態。文件描述符可以是磁盤文件的、套接字的等。 |
|
函數聲明 |
int select (int nfds, fd_set * readfds, fd_set * writefds, fd_set * exceptfds, struct timeval * timeout); |
|
函數參數 |
參數1:[輸入|輸出|輸入&輸出],參數說明。 參數2:[輸入|輸出|輸入&輸出],參數說明。 …… |
|
返回值 |
返回值1:返回值說明。 返回值2:返回值說明。 …… |
|
線程安全 |
是 或 否 或 未知 |
|
信號打斷 |
是 或 否 或 未知 |
|
其他說明 |
fd_set fdR; FD_ZERO(fd_set *fdset):清空fdset與所有文件句柄的聯系。 FD_SET(int fd, fd_set *fdset):建立文件句柄fd與fdset的聯系。 FD_CLR(int fd, fd_set *fdset):清除文件句柄fd與fdset的聯系。 FD_ISSET(int fd, fd_set *fdset):檢查fdset聯系的文件句柄fd是否可讀寫,當>0表示可讀寫。 第一,若將NULL以形參傳入,即不傳入時間結構,就是將select置于阻塞狀態,一定等到監視文件描述符集合中某個文件描述符發生變化為止; 第二,若將時間值設為0秒0毫秒,就變成一個純粹的非阻塞函數,不管文件描述符是否有變化,都立刻返回繼續執行,文件無變化返回0,有變化返回一個正值; 第三,timeout的值大于0,這就是等待的超時時間,即select在timeout時間內阻塞,超時時間之內有事件到來就返回了,否則在超時后不管怎樣一定返回,返回值同上述。 |
1.4.5.2 poll
|
函數名稱 |
poll |
|
頭文件 |
#include <poll.h> |
|
函數功能 |
阻塞檢查一個或多個文件描述符是否處于可讀或可寫或異常的狀態。文件描述符可以是磁盤文件的、套接字的等,不能用于消息隊列標識符。 |
|
函數聲明 |
int poll (struct pollfd * fds, nfds_t nfds, int timeout); |
|
函數參數 |
fds:[輸入&輸出],struct pollfd結構類型的數組,存放需要檢查哪些文件描述符的哪些狀態,并輸出經過檢查后,這些文件描述符目前處于哪些狀態。 nfds:[輸入],表示fds結構體數組中的元素的總個數,可以為1或者大于1。如果為0,表示不檢查任何文件描述符,直接等待最大阻塞時間。 timeout:[輸入],最大阻塞時間,單位毫秒,為0表示不阻塞立即返回,為-1表示無限制阻塞。最大阻塞時間內,如果有文件描述符處于要檢查的狀態,此函數會立即返回有多少文件描述符處于要檢查的狀態,如果最大阻塞時間已到,還是沒有文件描述符處于要檢查的狀態,此函數也會立即返回0。 |
|
返回值 |
正整數:有多少文件描述符處于要檢查的狀態。 0:無文件描述符處于要檢查的狀態。 -1:失敗,并設置errno錯誤碼變量。 |
|
線程安全 |
是 |
|
信號打斷 |
是 |
|
其他說明 |
有的操作系統里timeout參數可是使用INFTIM宏,這個宏其實就是-1。 |
1.5 時鐘
1.5.1 gettimeofday
|
函數名稱 |
gettimeofday |
|
頭文件 |
#include <sys/time.h> |
|
函數功能 |
獲取當前操作系統的時鐘。 |
|
函數聲明 |
int gettimeofday (struct timeval * tv, struct timezone * tz); |
|
函數參數 |
tv:[輸出],存放1970年1月1日00:00:00到現在一共走了多少秒,精確到微秒,為NULL表示不關心。 tz:[輸出],當地時區信息,為NULL表示不關心。 |
|
返回值 |
0:成功。 -1:失敗,并設置errno錯誤碼變量。 |
|
線程安全 |
是 |
|
信號打斷 |
否 |
|
其他說明 |
|
1.5.2 settimeofday
|
函數名稱 |
settimeofday |
|
頭文件 |
#include <sys/time.h> |
|
函數功能 |
設置當前操作系統的時鐘和時區。 |
|
函數聲明 |
int settimeofday(const struct timeval * tv, const struct timezone * tz); |
|
函數參數 |
tv:[輸入],將當前操作系統的時鐘要設置的時間,從1970年1月1日00:00:00到要設置的時間一共走了多少秒,為NULL表示不設置。 tz:[輸入],要設置當前操作系統的時區信息,為NULL表示不設置。 |
|
返回值 |
0:成功。 -1:失敗,并設置errno錯誤碼變量。 |
|
線程安全 |
是 |
|
信號打斷 |
否 |
|
其他說明 |
調用此函數需要進程具有root權限。 |
1.5.3 localtime_r(未完成)
|
函數名稱 |
localtime |
|
頭文件 |
#include <time.h> |
|
函數功能 |
把從1970年1月1日00:00:00到現在所走的秒數轉換到指定的日歷結構體。 |
|
函數聲明 |
struct tm * localtime_r (const time_t * timep, struct tm * result); |
|
函數參數 |
timep:[輸入],從1970年1月1日00:00:00到現在一共走了多少秒。 參數2:[輸出],參數說明。 …… |
|
返回值 |
返回值1:返回值說明。 返回值2:返回值說明。 …… |
|
線程安全 |
是 |
|
信號打斷 |
是 或 否 或 未知 |
|
其他說明 |
…… …… |
1.5.4 mktime(未完成)
|
函數名稱 |
mktime |
|
頭文件 |
#include <time.h> |
|
函數功能 |
把日歷結構體轉換為從1970年1月1日00:00:00到日歷結構體描述的那一時刻所走的秒數。 |
|
函數聲明 |
time_t mktime(struct tm * timeptr); |
|
函數參數 |
timeptr:[輸入],日歷結構體的指針。 |
|
返回值 |
所走的秒數。 |
|
錯誤碼 |
EXXXX:錯誤碼說明。 EXXXX:錯誤碼說明。 …… |
|
線程安全 |
是 或 否 或 未知 |
|
信號打斷 |
是 或 否 或 未知 |
|
原子操作 |
是 或 否 或 未知 |
|
其他說明 |
…… …… |
1.6 進程
1.6.1 getpid(未完成)
|
函數名稱 |
_getpid |
|
頭文件 |
|
|
函數功能 |
獲取本進程的PID號。 |
|
函數聲明 |
int getpid ( void ); |
|
函數參數 |
無 |
|
返回值 |
本進程的PID號 |
|
錯誤碼 |
無 |
|
線程安全 |
是 |
|
信號打斷 |
否 |
|
原子操作 |
是 |
|
其他說明 |
|
1.7 信號
1.7.1 signal (未完成)
|
函數名稱 |
signal |
|
頭文件 |
未知 |
|
函數功能 |
設置指定信號的捕捉函數。 |
|
函數聲明 |
|
|
函數參數 |
|
|
返回值 |
|
|
錯誤碼 |
EXXXX:錯誤碼說明。 EXXXX:錯誤碼說明。 …… |
|
線程安全 |
是 或 否 或 未知 |
|
信號打斷 |
是 或 否 或 未知 |
|
原子操作 |
是 或 否 或 未知 |
|
其他說明 |
…… …… |
1.8 套接字
1.8.1 accept
|
頭文件 |
#include <sys/types.h> #include <sys/socket.h> |
|
函數名稱 |
accept |
|
函數功能 |
函數主要功能說明。 |
|
函數聲明 |
類型 函數名 (類型 參數1, 類型 參數2, ……); |
|
函數參數 |
參數1:[輸入|輸出|輸入&輸出],參數說明。 參數2:[輸入|輸出|輸入&輸出],參數說明。 …… |
|
返回值 |
返回值1:返回值說明。 返回值2:返回值說明。 …… |
|
線程安全 |
是 或 否 或 未知 |
|
信號打斷 |
是 或 否,有些操作系統內核會打斷,有些又不會 |
|
注意事項 |
…… …… |
1.8.2 getaddrinfo(未完成)
頭文件 :#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
函數名稱:getaddrinfo
函數功能:根據指定的主機名和服務名獲取地址信息。
函數聲明:int getaddrinfo (const char * node,
const char * service,
const struct addrinfo * hints,
struct addrinfo ** res);
函數參數:參數1:參數說明。
參數2:參數說明。
……
返回值 :0:成功。
EAI_ADDRFAMILY:The specified network host does not have any network addresses in the requested address family.
EAI_AGAIN:The name server returned a temporary failure indication. Try again later.
EAI_BADFLAGS:ai_flags contains invalid flags.
EAI_FAIL:The name server returned a permanent failure indication.
EAI_FAMILY:The requested address family is not supported at all.
EAI_MEMORY:Out of memory.
EAI_NODATA:The specified network host exists, but does not have any network addresses defined.
EAI_NONAME:The node or service is not known; or both node and service are NULL; or AI_NUMERICSERV was specified in hints.ai_flags and service was not a numeric port-number string.
EAI_SERVICE:The requested service is not available for the requested socket type. It may be available through another socket type.
EAI_SOCKTYPE:The requested socket type is not supported at all.
EAI_SYSTEM:Other system error, check errno for details.
線程安全:是
信號打斷:是 或 否 或 未知
注意事項:
……
……
1.8.3 getnameinfo(未完成)
頭文件 :#include <sys/socket.h>
#include <netdb.h>
函數名稱:getnameinfo
函數功能:函數主要功能說明。
函數聲明:int getnameinfo (const struct sockaddr * sa,
socklen_t salen,
char *host,
size_t hostlen,
char *serv,
size_t servlen,
int flags);
函數參數:
返回值 :0:成功。
EAI_AGAIN:The name could not be resolved at this time. Try again later.
EAI_BADFLAGS:The flags argument has an invalid value.
EAI_FAIL:A nonrecoverable error occurred.
EAI_FAMILY:The address family was not recognized, or the address length was invalid for the specified family.
EAI_MEMORY:Out of memory.
EAI_NONAME:The name does not resolve for the supplied arguments. NI_NAMEREQD is set and the host's name cannot be located, or neither hostname nor service name were requested.
EAI_OVERFLOW:The buffer pointed to by host or serv was too small.
EAI_SYSTEM:A system error occurred. The error code can be found in errno.
線程安全:是
信號打斷:是 或 否 或 未知
注意事項:
1.8.4 getifaddrs(未完成)
頭文件 :#include <sys/types.h>
#include <ifaddrs.h>
函數名稱:getifaddrs
函數功能:獲取網絡設備的IP地址。
函數聲明:int getifaddrs (struct ifaddrs ** ifap);
函數參數:0:成功。
-1:失敗,并設置errno錯誤碼變量。
返回值 :返回值1:返回值說明。
返回值2:返回值說明。
……
線程安全:是 或 否 或 未知
信號打斷:是 或 否 或 未知
注意事項:
struct ifaddrs
{
struct ifaddrs * ifa_next; //指向鏈表的下一個成員
char * ifa_name; //網絡設備名字符串
unsigned int ifa_flags; //Flags from SIOCGIFFLAGS
struct sockaddr * ifa_addr; //Address of interface
struct sockaddr * ifa_netmask; //Netmask of interface
union
{
struct sockaddr * ifu_broadaddr; // Broadcast address of interface
struct sockaddr * ifu_dstaddr; // Point-to-point destination address
}ifa_ifu;
#define ifa_broadaddr ifa_ifu.ifu_broadaddr
#define ifa_dstaddr ifa_ifu.ifu_dstaddr
void * ifa_data; // Address-specific data
};
ifa_next指向鏈表的下一個成員;ifa_name是接口名稱,以0結尾的字符串,比如eth0,lo;ifa_flags是接口的標識位(比如當IFF_BROADCAST或IFF_POINTOPOINT設置到此標識位時,影響聯合體變量ifu_broadaddr存儲廣播地址或ifu_dstaddr記錄點對點地址);ifa_netmask存儲該接口的子網掩碼;結構體變量存儲廣播地址或點對點地址(見括弧介紹ifa_flags);ifa_data存儲了該接口協議族的特殊信息,它通常是NULL(一般不關注他)。
使用完后,必須使用freeifaddrs()函數釋放內存。
1.9 消息隊列
1.9.1 msgget
|
函數名稱 |
msgget |
|
頭文件 |
#include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> |
|
函數功能 |
根據消息隊列的關鍵字,創建一個新的消息隊列標識符(msqid),或者獲取一個已存在的消息隊列標識符(msqid)。 |
|
函數聲明 |
int msgget (key_t key, int msgflg); |
|
函數參數 |
key:[輸入],消息隊列的關鍵字,填入新的消息隊列的關鍵字或者已存在的消息隊列的關鍵字,操作系統就是根據消息隊列的關鍵字來找對應的消息隊列標識符。 msgflg:[輸入],創建或獲取消息隊列時的標記。可以是(用"|"選擇多個): IPC_CREAT:如果消息隊列的關鍵字不存在,就創建一個新的消息隊列標識符,如果已存在,就返回這個已存在的消息隊列標識符。如果不使用此標記,如果消息隊列的關鍵字不存在,就返回失敗,如果已存在,就返回這個已存在的消息隊列標識符。 IPC_EXCL:只能和IPC_CREAT同時使用(用"|"連接),如果消息隊列的關鍵字不存在,就創建一個新的消息隊列標識符,如果已存在,就返回失敗。 IPC_PRIVATE:創建一個私有消息隊列,理論上只可以為當前進程所訪問,消息隊列的關鍵字必須為0,否則會返回失敗。無需指定IPC_CREAT標記,指定了也沒有關系。 0666:權限位,操作此消息隊列的權限,和文件系統的權限位意思一樣。 |
|
返回值 |
-1:失敗。 其他:消息隊列標識符。 |
|
錯誤碼 |
|
|
線程安全 |
是 |
|
信號打斷 |
否 |
|
其他說明 |
如果獲取一個已存在的消息隊列標識符,但是沒有操作此消息隊列的權限,會返回失敗。 |
1.9.2 msgsnd
|
函數名稱 |
msgsnd |
|
頭文件 |
#include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> |
|
函數功能 |
根據消息隊列標識符(msqid),阻塞向消息隊列里發送一條消息。 |
|
函數聲明 |
int msgsnd (int msqid, const void * msgp, size_t msgsz, int msgflg); |
|
函數參數 |
msqid:[輸入],消息隊列標識符。如果此參數不是有效的消息隊列標識符,則立即返回失敗并設置EINVAL錯誤碼。 msgp:[輸入],消息緩存結構體指針,要發送的消息數據就放在此結構體的消息數據成員變量里,不能為NULL。如果此參數是無效的指針,則立即返回失敗并設置EFAULT錯誤碼或者段錯誤。 msgsz:[輸入],消息緩存結構體的消息數據成員變量的長度,不包括消息類型成員變量,單位字節,必須大于等于0。如果為0,表示發送一條沒有消息數據的消息。如果長度超過限制,則立即返回失敗并設置EINVAL錯誤碼。如果操作系統沒有足夠的內存存放這條消息,則立即返回失敗并設置ENOMEM錯誤碼。 msgflg:[輸入],發送消息時的標記。可以是(用"|"選擇多個): IPC_NOWAIT:如果使用此標記,且消息隊列沒有足夠的內存容納此條消息,則立即返回失敗并設置EAGAIN錯誤碼,如果不使用此標記,就會阻塞等待到有足夠的內存容納此條消息為止。 |
|
返回值 |
-1:失敗。 0:成功。 |
|
錯誤碼 |
EACCES:進程對此消息隊列沒有寫權限。 EAGAIN:消息隊列沒有足夠的內存存放這條消息,且使用了IPC_NOWAIT標識。 EFAULT:msgp參數是無效的指針。 EIDRM:此消息隊列已經被刪除。 EINTR:函數在阻塞發送消息時,進程突然收到信號。 EINVAL:msgqid參數不是有效的消息隊列標識符,或者msgp消息緩存結構體的消息類型成員變量的值不是正數,或者msgsz參數小于0或超過限制。 ENOMEM:操作系統沒有足夠的內存存放這條消息。 |
|
線程安全 |
是 |
|
信號打斷 |
是 |
|
其他說明 |
如果正在阻塞的時候消息隊列被刪除,則立即返回EIDRM錯誤。 如果正在阻塞的時候,進程收到信號,則立即返回EINTR錯誤。 如果進程對此消息隊列沒有寫權限,會返回EACCES錯誤。 |
1.9.3 msgrcv
|
函數名稱 |
msgrcv |
|
頭文件 |
#include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> |
|
函數功能 |
根據消息隊列標識符(msqid),阻塞從消息隊列里接收一條最先放入消息隊列的、且消息類型匹配的消息數據放入指定的消息緩存結構體里,接收后此條消息會從消息隊列中刪除。 |
|
函數聲明 |
ssize_t msgrcv (int msqid, void * msgp, size_t msgsz, long msgtyp, int msgflg); |
|
函數參數 |
msqid:[輸入],消息隊列標識符。如果此參數不是有效的消息隊列標識符,則立即返回失敗并設置EINVAL錯誤碼。 msgp:[輸出],消息緩存結構體指針,接收到的消息數據會放在此結構體的消息數據成員變量里,不能為NULL。如果此參數是無效的指針,則立即返回失敗并設置EFAULT錯誤碼或者段錯誤。 msgsz:[輸入],消息緩存結構體的消息數據成員變量的長度,表示最大能放多長的消息,單位字節,必須大于等于0。如果接收到的符合條件的消息數據長度超過msgsz參數,且未指定MSG_NOERROR標記,則立即返回E2BIG錯誤,且消息還留在消息隊列中。如果此參數小于0,則立即返回EINVAL錯誤。 msgtyp:[輸入],消息類型,要接收一條什么類型的消息,為0表示任意消息類型。 msgflg:[輸入],接收消息時的標記。可以是(用"|"選擇多個): IPC_NOWAIT:如果使用此標記,且消息隊列為空,則立即返回失敗并設置ENOMSG錯誤碼。如果不使用此標記,那么函數會一直阻塞到可以從消息隊列中接收到符合條件的消息才返回。 MSG_NOERROR:如果使用此標記,且接收到的消息數據的長度大于msgsz參數,則將只返回msgsz這么長的消息數據,剩下的尾部數據被丟棄了。如果不使用此標記,則立即返回失敗并設置E2BIG錯誤碼,而消息還留在消息隊列中。 |
|
返回值 |
-1:失敗,并設置errno錯誤碼變量。 其他:接收的消息的長度,單位字節。 |
|
錯誤碼 |
E2BIG:接收到的消息數據的長度大于msgsz參數,且未使用MSG_NOERROR標記。 EACCES:進程對此消息隊列沒有讀權限。 EAGAIN:消息隊列中沒有符合條件的消息,且使用了IPC_NOWAIT標記。 EFAULT:msgp參數是無效的指針。 EIDRM:函數在阻塞接收消息時,消息隊列突然被刪除。 EINITR:函數在阻塞接收消息時,進程突然收到信號。 EINVAL:msgqid參數不是有效的消息隊列標識符,或者msgsz參數小于0。 |
|
線程安全 |
是 |
|
信號打斷 |
是 |
|
其他說明 |
|
1.9.4 msgctl(未完成)
|
函數名稱 |
msgctl |
|
頭文件 |
#include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> |
|
函數功能 |
對指定的消息隊列進行查詢、修改、刪除等操作。 |
|
函數聲明 |
int msgctl (int msqid, int cmd, struct msqid_ds * buf); |
|
函數參數 |
msqid:[輸入],消息隊列標識符。如果此參數不是有效的消息隊列標識符,則立即返回EINVAL錯誤。 cmd:[輸入],要執行什么操作。如果此參數不是有效的操作,則立即返回EINVAL錯誤。可以是(只能選一個): IPC_STAT:獲取消息隊列的struct msqid_ds結構體信息。如果進程對此消息隊列沒有讀權限,會返回EACCES錯誤。 IPC_SET:該命令用來設置消息隊列的屬性,要設置的屬性存儲在buf指向的msqid結構中;可設置屬性包括:msg_perm.uid、msg_perm.gid、msg_perm.mode以及msg_qbytes,同時,也影響msg_ctime成員。 IPC_RMID:立即刪除此此消息隊列,此消息隊列的所有正在阻塞的操作立即返回EIDRM錯誤。 IPC_INFO: MSG_INFO: MSG_STAT: buf:[輸入&輸出],如果cmd參數是: IPC_STAT:[輸出],則此參數是一個struct msqid_ds結構體類型變量的指針。如果此參數不是有效的一個struct msqid_ds結構體類型的變量,則立即返回EFAULT錯誤或者段錯誤。 IPC_SET:則此參數 IPC_RMID: IPC_INFO: MSG_INFO: MSG_STAT: |
|
返回值 |
返回值1:返回值說明。 返回值2:返回值說明。 …… |
|
線程安全 |
是 或 否 或 未知 |
|
信號打斷 |
是 或 否 或 未知 |
|
其他說明 |
…… …… |
1.10 FTP文件傳輸協議
1.11 INI配置文件
1.11.1 函數模板(未完成)
|
函數名稱 |
xxx |
|
頭文件 |
#include <xxx.h> #include <xxx.h> |
|
函數功能 |
函數主要功能說明。 |
|
函數聲明 |
類型 函數名 (類型 參數1, 類型 參數2, ……); |
|
函數參數 |
參數1:[輸入|輸出|輸入&輸出],參數說明。 參數2:[輸入|輸出|輸入&輸出],參數說明。 …… |
|
返回值 |
返回值1:返回值說明。 返回值2:返回值說明。 …… |
|
錯誤碼 |
EXXXX:錯誤碼說明。 EXXXX:錯誤碼說明。 …… |
|
線程安全 |
是 或 否 或 未知 |
|
信號打斷 |
是 或 否 或 未知 |
|
原子操作 |
是 或 否 或 未知 |
|
其他說明 |
…… …… |
2 結構體庫
2.1 結構體模板(未完成)
|
結構體名稱 |
xxx |
|
頭文件 |
#include <xxx.h> #include <xxx.h> |
|
結構體說明 |
結構體主要用途說明。 |
|
結構體聲明 |
struct xxx { 類型 成員變量1; 類型 成員變量2; …… }; |
|
成員變量 |
成員變量1:成員變量說明。 成員變量2:成員變量說明。 …… |
|
其他說明 |
…… …… |
2.2 套接字
2.2.1 sockaddr
頭文件 :#include <linux/socket.h>
結構體名稱:sockaddr
結構體說明:結構體主要使用說明。
結構體聲明:struct sockaddr
{
sa_family_t sa_family; /* address family, AF_xxx */
char sa_data[14]; /* 14 bytes of protocol address */
};
成員變量 :sa_family:IP地址的地址族,用AF_xxx定義的
sa_data:協議的地址數據,占14個字節的
注意事項 :
……
2.2.2 sockaddr_in
頭文件 :#include <netinet/in.h>
結構體名稱:sockaddr_in
結構體說明:一般用于對IPv4的地址信息的說明。
結構體聲明:struct sockaddr_in
{
__SOCKADDR_COMMON (sin_);
in_port_t sin_port; /* Port number. */
struct in_addr sin_addr; /* Internet address. */
/* Pad to size of `struct sockaddr'. */
unsigned char sin_zero[sizeof (struct sockaddr) -
__SOCKADDR_COMMON_SIZE -
sizeof (in_port_t) -
sizeof (struct in_addr)];
};
成員變量 :sin_port:存放端口號。
sin_addr:存放IP地址。
sin_zero:填充數據,為了占滿14個字節,無實際意義。
注意事項 :
……
……
2.2.3 sockaddr_in6
頭文件 :#include <netinet/in.h>
結構體名稱:sockaddr_in6
結構體說明:一般用于對IPv6的地址信息的說明。
結構體聲明:struct sockaddr_in6
{
__SOCKADDR_COMMON (sin6_);
in_port_t sin6_port; /* Transport layer port # */
uint32_t sin6_flowinfo; /* IPv6 flow information */
struct in6_addr sin6_addr; /* IPv6 address */
uint32_t sin6_scope_id; /* IPv6 scope-id */
};
成員變量 :sin6_port:成員變量說明。
sin6_flowinfo:成員變量說明。
sin6_addr:
sin6_scope_id:
注意事項 :
……
……
2.3 網絡設備
2.3.1 ifaddrs
頭文件 :#include <ifaddrs.h>
結構體名稱:ifaddrs
結構體說明:結構體主要使用說明。
結構體聲明:struct ifaddrs
{
struct ifaddrs * ifa_next; /* Pointer to the next structure. */
char * ifa_name; /* Name of this network interface. */
unsigned int ifa_flags; /* Flags as from SIOCGIFFLAGS ioctl. */
struct sockaddr * ifa_addr; /* Network address of this interface. */
struct sockaddr * ifa_netmask; /* Netmask of this interface. */
union
{
/* At most one of the following two is valid. If the IFF_BROADCAST
bit is set in `ifa_flags', then `ifa_broadaddr' is valid. If the
IFF_POINTOPOINT bit is set, then `ifa_dstaddr' is valid.
It is never the case that both these bits are set at once. */
struct sockaddr * ifu_broadaddr; /* Broadcast address of this interface. */
struct sockaddr * ifu_dstaddr; /* Point-to-point destination address. */
} ifa_ifu;
/* These very same macros are defined by <net/if.h> for `struct ifaddr'.
So if they are defined already, the existing definitions will be fine. */
# ifndef ifa_broadaddr
# define ifa_broadaddr ifa_ifu.ifu_broadaddr
# endif
# ifndef ifa_dstaddr
# define ifa_dstaddr ifa_ifu.ifu_dstaddr
# endif
void * ifa_data; /* Address-specific data (may be unused). */
};
成員變量 :ifa_next:指向鏈表的下一個成員;
ifa_name:是接口名稱,以0結尾的字符串,比如eth0,lo;
ifa_flags:是接口的標識位(比如當IFF_BROADCAST或IFF_POINTOPOINT設置到此標識位時,影響聯合體變量ifu_broadaddr存儲廣播地址或ifu_dstaddr記錄點對點地址);
ifa_netmask:存儲該接口的子網掩碼;結構體變量存儲廣播地址或點對點地址(見括弧介紹ifa_flags);
ifa_data:存儲了該接口協議族的特殊信息,它通常是NULL(一般不關注他)。
注意事項 :
……
……
2.4 文件描述符
2.4.1 pollfd
頭文件 :#include <sys/poll.h>
結構體名稱:pollfd
結構體說明:結構體主要使用說明。
結構體聲明:struct pollfd
{
int fd; /* File descriptor to poll. */
short int events; /* Types of events poller cares about. */
short int revents; /* Types of events that actually occurred. */
};
成員變量 :fd:[輸入],存放用于poll()函數檢查的文件描述符。
events:[輸入],存放需要檢查此文件描述符的哪些狀態。
revents:[輸出],存放此文件描述符經過檢查后,已經處于哪些狀態。
注意事項 :
|
狀態類型 |
數值 |
說明 |
|
POLLIN |
0x001 |
有數據可讀 |
|
POLLRDNORM |
0x040 |
有普通數據可讀 |
|
POLLRDBAND |
0x080 |
有優先數據可讀 |
|
POLLPRI |
0x002 |
有緊迫數據可讀 |
|
POLLOUT |
0x004 |
普通數據可寫 |
|
POLLWRNORM |
0x100 |
普通數據可寫 |
|
POLLWRBAND |
0x200 |
優先級帶數據可寫 |
|
POLLERR |
0x008 |
指定的文件描述符發生錯誤 |
|
POLLHUP |
0x010 |
指定的文件描述符發生掛起 |
|
POLLNVAL |
0x020 |
指定的文件描述符無效 |
POLLIN | POLLPRI等價于select()的讀事件,POLLOUT | POLLWRBAND等價于select()的寫事件。
POLLIN等價于POLLRDNORM | POLLRDBAND,而POLLOUT則等價于POLLWRNORM。
2.5 時鐘
2.5.1 timeval
|
結構體名稱 |
timeval |
|
頭文件 |
#include <sys/time.h> |
|
結構體說明 |
用于記錄時間的結構體。 |
|
結構體聲明 |
struct timeval { time_t tv_sec; suseconds_t tv_usec; }; |
|
成員變量 |
tv_sec:[輸入&輸出],表示多少秒。 tv_usec:[輸入&輸出],表示多少微秒,1秒等于1000000微秒。 |
|
其他說明 |
|
2.5.2 timezone
|
結構體名稱 |
timezone |
|
頭文件 |
#include <sys/time.h> |
|
結構體說明 |
用于記錄時區的結構體。 |
|
結構體聲明 |
struct timezone { int tz_minuteswest; int tz_dsttime; }; |
|
成員變量 |
tz_minuteswest:[輸入&輸出],和格林威治時間往西方的時差,差了多少分鐘。 tz_dsttime:[輸入&輸出],夏時制或夏令時或日光節約時(Daylight Saving Time)的類型。 類型如下: DST_NONE //不使用 DST_USA //美國 DST_AUST //澳洲 DST_WET //西歐 DST_MET //中歐 DST_EET //東歐 DST_CAN //加拿大 DST_GB //大不列顛 DST_RUM //羅馬尼亞 DST_TUR //土耳其 DST_AUSTALT //澳洲(1986年以后) |
|
其他說明 |
|
2.5.3 tm
|
結構體名稱 |
tm |
|
頭文件 |
#include <time.h> |
|
結構體說明 |
結構體主要用途說明。 |
|
結構體聲明 |
struct tm { int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_year; int tm_wday; int tm_yday; int tm_isdst; }; |
|
成員變量 |
tm_sec:表示秒鐘,在[0,60]之間,多出來的一秒是用來處理閏秒問題。 tm_min:表示分鐘,在[0,59]之間。 tm_hour:表示時鐘,在[0,23]之間。 tm_mday:表示日份,在[1,31]之間。 tm_mon:表示月份,在[0,11]之間。 tm_year:表示1900年到今年一共差多少年。 tm_wday:表示星期幾,在[0,6]之間,星期天為0,星期一為1,以此類推。 tm_yday:表示當天是本年第幾日,在[0,365]之間,閏年有366日。 tm_isdst:表示是否為日光節約時間。 |
|
其他說明 |
|
2.6 消息隊列
2.6.1 msgbuf
|
結構體名稱 |
msgbuf |
|
頭文件 |
#include <linux/msg.h> |
|
結構體說明 |
消息緩存結構體,用于消息隊列之間的消息發送和接收。 |
|
結構體聲明 |
struct msgbuf { long mtype; char mtext[1]; }; |
|
成員變量 |
mtype:[輸入&輸出],消息類型,必須大于0。 mtext:[輸入&輸出],消息文本,長度可以無限大。 |
|
其他說明 |
|
2.6.2 msginfo(未完成)
|
結構體名稱 |
msginfo |
|
頭文件 |
#include <sys/msg.h> |
|
結構體說明 |
結構體主要用途說明。 |
|
結構體聲明 |
struct msginfo { int msgpool; /* Size in bytes of buffer pool used to hold message data; unused */ int msgmap; /* Max. # of entries in message map; unused */ int msgmax; /* Max. # of bytes that can be written in a single message */ int msgmnb; /* Max. # of bytes that can be written to queue; used to initialize msg_qbytes during queue creation (msgget()) */ int msgmni; /* Max. # of message queues */ int msgssz; /* Message segment size; unused */ int msgtql; /* Max. # of messages on all queues in system; unused */ unsigned short int msgseg; /* Max. # of segments; unused */ }; |
|
成員變量 |
成員變量1:[輸入|輸出|輸入&輸出],成員變量說明。 成員變量2:[輸入|輸出|輸入&輸出],成員變量說明。 …… |
|
其他說明 |
…… …… |
2.6.3 msqid_ds(未完成)
|
結構體名稱 |
msqid_ds |
|
頭文件 |
#include <sys/msg.h> |
|
結構體說明 |
結構體主要用途說明。 |
|
結構體聲明 |
struct msqid_ds { struct ipc_perm msg_perm; /* Ownership and permissions time_t msg_stime; /* Time of last msgsnd() */ time_t msg_rtime; /* Time of last msgrcv() */ time_t msg_ctime; /* Time of last change */ unsigned long __msg_cbytes; /* Current number of bytes in queue (non-standard) */ msgqnum_t msg_qnum; /* Current number of messages in queue */ msglen_t msg_qbytes; /* Maximum number of bytes allowed in queue */ pid_t msg_lspid; /* PID of last msgsnd() */ pid_t msg_lrpid; /* PID of last msgrcv() */ }; |
|
成員變量 |
成員變量1:[輸入|輸出|輸入&輸出],成員變量說明。 成員變量2:[輸入|輸出|輸入&輸出],成員變量說明。 …… |
|
其他說明 |
…… …… |
2.6.4 ipc_perm(未完成)
|
結構體名稱 |
ipc_perm |
|
頭文件 |
#include <sys/ipc.h> |
|
結構體說明 |
結構體主要用途說明。 |
|
結構體聲明 |
struct ipc_perm { key_t key; /* Key supplied to msgget() */ uid_t uid; /* Effective UID of owner */ gid_t gid; /* Effective GID of owner */ uid_t cuid; /* Effective UID of creator */ gid_t cgid; /* Effective GID of creator */ unsigned short mode; /* Permissions */ unsigned short seq; /* Sequence number */ }; |
|
成員變量 |
成員變量1:[輸入|輸出|輸入&輸出],成員變量說明。 成員變量2:[輸入|輸出|輸入&輸出],成員變量說明。 …… |
|
其他說明 |
…… …… |
3 類庫
3.1 類模板
3.2 list
頭文件:#include <list>
assign() 給list賦值
back() 返回最后一個元素
begin() 返回指向第一個元素的迭代器
clear() 刪除所有元素
empty() 如果list是空的則返回true
end() 返回末尾的迭代器
erase() 刪除一個元素
front() 返回第一個元素
get_allocator() 返回list的配置器
insert() 插入一個元素到list中
max_size() 返回list能容納的最大元素數量
merge() 合并兩個list
pop_back() 刪除最后一個元素
pop_front() 刪除第一個元素
push_back() 在list的末尾添加一個元素
push_front() 在list的頭部添加一個元素
rbegin() 返回指向第一個元素的逆向迭代器
remove() 從list刪除元素
remove_if() 按指定條件刪除元素
rend() 指向list末尾的逆向迭代器
resize() 改變list的大小
reverse() 把list的元素倒轉
size() 返回list中的元素個數
sort() 給list排序
splice() 合并兩個list
swap() 交換兩個list
unique() 刪除list中重復的元素
4 errno錯誤碼
注意:數值在不同的操作系統上可能不一樣。
EPERM (1) /* Operation not permitted */
ENOENT (2) /* No such file or directory */
ESRCH (3) /* No such process */
EINTR (4) /* Interrupted system call */
EIO (5) /* Input/output error */
ENXIO (6) /* No such device or address */
E2BIG (7) /* Argument list too long */
ENOEXEC (8) /* Exec format error */
EBADF (9) /* Bad file descriptor */
ECHILD (10)/* No child processes */
EDEADLK (11)/* Resource deadlock avoided */
ENOMEM (12)/* Cannot allocate memory */
EACCES (13)/* Permission denied */
EFAULT (14)/* Bad address */
ENOTBLK (15)/* Block device required */
EBUSY (16)/* Device or resource busy */
EEXIST (17)/* File exists */
EXDEV (18)/* Invalid cross-device link */
ENODEV (19)/* No such device */
ENOTDIR (20)/* Not a directory */
EISDIR (21)/* Is a directory */
EINVAL (22)/* Invalid argument */
EMFILE (24)/* Too many open files */
ENFILE (23)/* Too many open files in system */
ENOTTY (25)/* Inappropriate ioctl for device */
ETXTBSY (26)/* Text file busy */
EFBIG (27)/* File too large */
ENOSPC (28)/* No space left on device */
ESPIPE (29)/* Illegal seek */
EROFS (30)/* Read-only file system */
EMLINK (31)/* Too many links */
EPIPE (32)/* Broken pipe */
EDOM (33)/* Numerical argument out of domain */
ERANGE (34)/* Numerical result out of range */
EAGAIN (35)/* Resource temporarily unavailable */
#define EWOULDBLOCK EAGAIN /* Operation would block */
EINPROGRESS (36)/* Operation now in progress */
EALREADY (37)/* Operation already in progress */
ENOTSOCK (38)/* Socket operation on non-socket */
EDESTADDRREQ (39)/* Destination address required */
EMSGSIZE (40)/* Message too long */
EPROTOTYPE (41)/* Protocol wrong type for socket */
ENOPROTOOPT (42)/* Protocol not available */
EPROTONOSUPPORT (43)/* Protocol not supported */
ESOCKTNOSUPPORT (44)/* Socket type not supported */
EOPNOTSUPP (45)/* Operation not supported */
EPFNOSUPPORT (46)/* Protocol family not supported */
EAFNOSUPPORT (47)/* Address family not supported by protocol */
EADDRINUSE (48)/* Address already in use */
EADDRNOTAVAIL (49)/* Cannot assign requested address */
ENETDOWN (50)/* Network is down */
ENETUNREACH (51)/* Network is unreachable */
ENETRESET (52)/* Network dropped connection on reset */
ECONNABORTED (53)/* Software caused connection abort */
ECONNRESET (54)/* Connection reset by peer */
ENOBUFS (55)/* No buffer space available */
EISCONN (56)/* Transport endpoint is already connected */
ENOTCONN (57)/* Transport endpoint is not connected */
ESHUTDOWN (58)/* Cannot send after transport endpoint shutdown */
ETOOMANYREFS (59)/* Too many references: cannot splice */
ETIMEDOUT (60)/* Connection timed out */
ECONNREFUSED (61)/* Connection refused */
ELOOP (62)/* Too many levels of symbolic links */
ENAMETOOLONG (63)/* File name too long */
EHOSTDOWN (64)/* Host is down */
EHOSTUNREACH (65)/* No route to host */
ENOTEMPTY (66)/* Directory not empty */
EPROCLIM (67)/* Too many processes */
EUSERS (68)/* Too many users */
EDQUOT (69)/* Disk quota exceeded */
ESTALE (70)/* Stale NFS file handle */
EREMOTE (71)/* Object is remote */
EBADRPC (72)/* RPC struct is bad */
ERPCMISMATCH (73)/* RPC version wrong */
EPROGUNAVAIL (74)/* RPC program not available */
EPROGMISMATCH (75)/* RPC program version wrong */
EPROCUNAVAIL (76)/* RPC bad procedure for program */
ENOLCK (77)/* No locks available */
ENOSYS (78)/* Function not implemented */
EFTYPE (79)/* Inappropriate file type or format */
EAUTH (80)/* Authentication error */
ENEEDAUTH (81)/* Need authenticator */
ELAST (81)/* Must be equal largest errno */
EBACKGROUND (100)/* Inappropriate operation for background process */
EDIED (101)/* Translator died */
ED (102)/* ? */
EGREGIOUS (103)/* You really blew it this time */
EIEIO (104)/* Computer bought the farm */
EGRATUITOUS (105)/* Gratuitous error */
EILSEQ (106)/* Invalid or incomplete multibyte or wide character */
EBADMSG (107)/* Bad message */
EIDRM (108)/* Identifier removed */
EMULTIHOP (109)/* Multihop attempted */
ENODATA (110)/* No data available */
ENOLINK (111)/* Link has been severed */
ENOMSG (112)/* No message of desired type */
ENOSR (113)/* Out of streams resources */
ENOSTR (114)/* Device not a stream */
EOVERFLOW (115)/* Value too large for defined data type */
EPROTO (116)/* Protocol error */
ETIME (117)/* Timer expired */
ECANCELED (118)/* Operation canceled */
ENOTSUP (118)/* Not supported */

浙公網安備 33010602011771號