Chinaunix首页 | 论坛 | 博客
  • 博客访问: 393925
  • 博文数量: 85
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1707
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-27 11:18
个人简介

学无止境……

文章分类

全部博文(85)

分类: LINUX

2014-07-15 14:36:19

文件描述符在形式上是一个非负整数。实际上,它指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。

内核分配文件描述符的原则是:通俗讲就是从最小的开始。但是其中 01被系统定义为 标准输入,标准输出,标准错误。在POSIX 中定义三个符号常量STDIN_FILENOSTDOUT_FILENO 和 STDERR_FILENO 来代替它们三个(包含在 <unistd.h>头文件中)。系统会为每一个进程自动打开上面三个文件(在很多代码中能看到close(0);close(1);close(2);就是在关闭他们仨,所以一般一个进程打开文件所对应的文件描述符就是从3开始…………。不信的运行下面代码。

点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include<fcntl.h>
  3. int main(void)
  4. {
  5.     int fd1, fd2, fd3;
  6.     
  7.     if((fd1 = open("/home/LuoYe/tmp1.txt",O_RDONLY | O_CREAT)) < 0)
  8.         perror("open");        
  9.     if((fd2 = open("/home/LuoYe/tmp2.txt",O_RDONLY | O_CREAT)) < 0)
  10.         perror("open");        
  11.     if((fd3 = open("/home/LuoYe/tmp3.txt",O_RDONLY | O_CREAT)) < 0)
  12.         perror("open");
  13.         
  14.     printf("fd1: %d \n",fd1);
  15.     printf("fd2: %d \n",fd2);
  16.     printf("fd3: %d \n",fd3);
  17.     close(fd1);
  18.     close(fd2);
  19.     close(fd3);
  20. return 0;
  21. }

运行结果:

fd1: 3 

fd2: 4 

fd3: 5 

文件描述符不是无穷大,可以通过命令 $ulimit –n查看一个进程最大分配的文件描述符,一般linux发行版都是1024,此值定义为 OPEN_MAX

阅读(1746) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~