/*
文件描述符 Linux通过文件描述符来访问文件,他们是一些整数(windows一般称之为句柄,我们可以理解为文件描述符就是我们访问文件的“手柄”)。通过open来将文件与描述符建立关联,一般来讲,Linux会为每一个进程自动创建以下默认的文件描述符。
0:标准输入
1:标准输出
2:标准出错
open函数返回值是一个文件描述符,它是唯一的,不同进程的文件描述符不能共享,如果两个进程同时打开同一个文件,则他们有不同的文件描述符,同时这也是一些服务器并发性能的限制因素之一 下面通过一个程序测试一个文件同时可以被打开多少次
*/
#include"stdio.h"
#include"sys/stat.h"
#include"fcntl.h"
#include"errno.h"
#include"string.h"
#define SUCCESS 0
#define FAILURE -1
int main(int argc,char ** argv)
{
int iFd;
int i = 0;
iFd = open("/etc/file",O_RDWR);
if (iFd < 0)
{
printf("error....\n");
return FAILURE;
}
i = i + 1;
while (iFd > 0)
{
iFd = open("/etc/file",O_RDWR);
if (iFd > 0)
{
i++;
}
else
{
perror("open Failed");
break;
}
}
printf("open file is %d\n",i+3); // 0 1 2 三个特殊的文件操作符
}
/* 运行程序,可以看到默认一个文件可以打开的数量
[root@desktop97 root]# ./a.out
open Failed: Too many open files
open file is 1024
手动修改默认限制
ulimit -HSn 10240
修改后的测试
[root@desktop97 root]# ./a.out
open Failed: Too many open files
open file is 10240
*/