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 */