2015-05-07 38 views
2

我使用的命令是:ulimit -n,我得到的数字是1024,这是我系统中每个进程打开文件的最大数量。但是通过下面的程序我可以看到数字510 ......?出了什么问题Linux中每个进程打开的文件的最大数量

#include <stdio.h> 
    #include <stdlib.h> 
    #include <unistd.h> 
    #include <sys/types.h> 
    #include <errno.h> 


    int main(void) 

{ 
     int pipe_ext = 0, pfd[ 2 ], counter = 0; 

     while (1) 
     { 
       pipe_ext = pipe(pfd); 
       //errno = 0; 

       if (pipe_ext == 0) 
       { 
         write(pfd[ 1 ], "R", 1); 

         counter = counter + 1; 
         printf("Counter = %d\n", counter); 
       } 
       else 
       { 
         perror("pipe()"); 
         printf("errno = %d\n", errno); 
         exit(1); 
       } 

     } 

     return(0); 
} 
+0

它不是一个真正的文件,进程的最大数目,它的文件描述符的最大数量,这可能是从管什么开放网络套接字。 – John

回答

3

这里没有问题。

A pipe有两端,每个都有它自己的文件描述符。

因此,pipe的每一端都会被视为违反限制的文件。

1024/2 = 512和510之间的细微差别是因为您的进程已经打开stdin,stdout和stderr文件,这些文件会超出限制。

1

对于每个pipe()调用,您将获得两个文件描述符。这就是为什么它在512

人结束了2管说"pipefd[0] refersto the read end of the pipe. pipefd[1] refers to the write end of the pipe. "

相关问题