Linux中每个进程的最大打开文件数

时间:2015-05-07 17:48:29

标签: linux pipe limit ulimit

我使用命令:ulimit -n,我取数字1024,这是我系统中每个进程的最大打开文件数。但是通过以下程序,我取数字510 ......?有什么不对

    #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 );
}

2 个答案:

答案 0 :(得分:3)

这里没有问题。

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

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

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

答案 1 :(得分:1)

对于每个pipe()调用,您将获得两个文件描述符。这就是它在512结束的原因。

man 2 pipe说"pipefd[0] refersto the read end of the pipe. pipefd[1] refers to the write end of the pipe. "