网络编程与文件描述符0,1,2

在Unix高级编程第13章《守护进程》(书343-344页)中提到过,可以用如下的方法使得守护进程打开/dev/null,使其具有文件描述符0、1、2。
    /* close */
    for(i = 0; i < OPEN_MAX; i++)
    {
        close(i);
    }
    fd0=open("/dev/null",O_RDONLY);
    fd1=dup(0);
    fd2=dup(0);
如果从shell中运行一个进程,默认会有3个文件描述符存在(0、1、2), 0与进程的标准输入相关联,1与进程的标准输出相关联,2与进程的标准错误输出相关联。
open返回的文件描述符一定是最小的未用描述符数值。在网络编程中,如果服务进程不是守护进程,且不占用文件描述符0,1,2,那么socket套接字就可能使用到文件描述符0,1,2,这样的话,就会导致服务器接受和发送的消息时错误的,导致服务不能正常使用。

你可能感兴趣的:(网络编程)