第二章第一节 创建文件描述符函数
文章目录
pipe函数
pipe函数创建一个管道,以实现进程间通信。
1 | /* |
因此,若要实现进程间双向数据传输,则要使用两个管道。默认情况下,这两个文件描述符都是阻塞的;即若使用read系统调用来读一个空的管道,则read会被阻塞;同理,使用write系统调用来写一个满的管道也会陷入阻塞。
fd[1]的引用计数归0,则使用read读该管道将返回0;fd[0]的引用计数归0,则使用write写该管道将失败,并触发SIGPIPE信号。
管道容量大小默认为65536字节,可使用fcntl函数修改管道容量。
此外,socket基础API提供socketpair函数创建双向管道。
1 | /* |
dup函数与dup2函数
dup*
函数可复制文件描述符。从而实现输入/输出的重定向。
1 | /* |
简要说明代码6-1输出重定向的原理。关闭标准输出文件描述符STDOUT_FILENO(值为1),然后复制socket文件描述符connfd。由于dup总是返回操作系统中最小的可用文件描述符,因此dup函数返回1。因此,printf实际上会打印到socket文件描述符connfd中。
以上就是CGI服务器的基本工作原理