Linux 中每个进程的最大打开文件数
Max number of open files per process in Linux
我使用命令: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 );
}
这里没有问题。
一个pipe
有两端,每个都有自己的文件描述符。
因此,pipe
的每一端都算作一个超出限制的文件。
1024/2 = 512 和 510 之间的细微差别是因为您的进程已经打开了文件 stdin、stdout 和 stderr,这计入了限制。
对于每个 pipe() 调用,您将获得两个文件描述符。这就是它以 512 结尾的原因。
man 2 管道说 "pipefd[0] refersto the read end of the pipe. pipefd[1] refers to the write end of the pipe. "
我使用命令: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 );
}
这里没有问题。
一个pipe
有两端,每个都有自己的文件描述符。
因此,pipe
的每一端都算作一个超出限制的文件。
1024/2 = 512 和 510 之间的细微差别是因为您的进程已经打开了文件 stdin、stdout 和 stderr,这计入了限制。
对于每个 pipe() 调用,您将获得两个文件描述符。这就是它以 512 结尾的原因。
man 2 管道说 "pipefd[0] refersto the read end of the pipe. pipefd[1] refers to the write end of the pipe. "