和文件描述符有关的函数:
- open
- close
- dup
- dup2
- fcntl
文件描述符为int整型变量,范围0-OPEN_MAX;
在linux下OPEN_MAX未在limits.h下定义,使用sysconf(_SC_OPEN_MAX)获得其值.
open打开文件返回文件描述符没什么好说的.
close()关闭文件描述符,注意当有多个文件描述符指向同一文件表项时,必须close所有与之关联的描述符才能真正关闭文件.
When all file descriptors associated with an open file description have been closed, the open file description shall be freed.
此时无法再对文件进行更改.
dup(),dup2()复制现存的文件描述符,在内核数据中一个新的文件描述符被创建.当总数达到OPEN_MAX时,进程无法再打开文件.
当cmd=F_DUPFD时 fcntl和dup,dup2功能类似.
附测试程序:
#include\<unistd.h>
#include\<stdio.h>
#include\<limits.h>
#include\<fcntl.h>
#include\<errno.h>
int main()
{
int i,f,open_max;
open_max=sysconf(_SC_OPEN_MAX);
for (i=3;i\<open_max;++i)
dup(STDOUT_FILENO);
// close(open_max-1);
f=open("test",O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR);
if (errno==EMFILE)
printf("ERROR\n");
else
printf("%d\n",f);
return 0;
}
Comments