初学unix编程,诚意求教
在unix环境高级编程,第17章有个服务器客户端程序示例,讲的是进程间的文件描述符传递,比较疑惑,直接传递描述符有意义吗,一个进程打开文件后获得文件描述符,无论父子进程还是无关进程,是不是都不能直接调用啊

解决方案 »

  1.   

    如果是父子关系的话还可以用,如果是没有关系的两个进程,这样做根本没有意义。进程打开文件的时候,内核会有个文件数据结构保存文件偏移量之类的东西,fd就是指向这个数据结构的。这个数据结构是进程独立的,所以每个进程的fd即使一样,但是对应的打开文件也是不一样的。父子关系关系的两个进程,子进程会继承下父进程的fd,并且使用父进程的文件数,据结构。
      

  2.   

    描述符传递不是简单的传送一个int类型的描述符的值,而是在接收进程中创建一个新的描述符,
    这个描述符与发送进程的描述符指向内核文件表中的相同项;这个功能最典型的应用场景就是进程池模式的网络服务程序。
    1. 控制进程负责接监视收网络连接请求,并将对应描述字通过描述符传递功能通知工作进程。
    2. 工作进程从网络连接读取和处理,并发回处理结果。
      

  3.   

    跨进程,Unix socket, SCM_RIGHTS
    Send  or  receive  a set of open file descriptors from another process.  The data portion contains an integer array of the file descriptors.  The passed file descriptors behave as though they have been created with dup(2).
      

  4.   

    学习了,原来linux中SCM_RIGHTS option居然没有用!!厉害厉害