Linux系统编程系列笔记之文件描述符

  • 定义:
    对于内核而言,任何对文件的操作都是对文件描述符的引用,它是一个非负整数;例如前三个整数(0,1,2)分别代表(括号里为宏表示):标准输入(STDIN_FILENO),标准输出(STDOUT_FILENO),错误输出(STDERR_FILENO),;而当我们创建一个文件时系统会给我们一个未使用的最小的整数来引用文件,该整数大小为0~OPEN_MAX在Linux中为1024,即可以同时打开

  • 标准系统函数调用(基本系统调用):
    open():打开文件
    close():关闭文件描述符
    create():创建文件描述符
    read():读取文件
    write():写入文件
    lseek():文件定位
    注:这些系统调用的对象是文件描述符,而且这些系统调用都是不带缓存的,因此只有在对反应速度有要求的情况下可以用否则还是最好用库函数来代替(带缓存的函数)

  • 文件描述符与文件指针之间的关系
    可以看看FILE类型数据结构定义:

typedef struct

  {

  int level; /*填充/清空一级缓存*/

  unsigned flag; /*文件状态指针*/

  char fd; /*文件描述符*/

  unsigned char hold;/*ungetc char if no buffer*/

  int bsize; /*缓存区大小*/

  unsigned char *buffer; /*Data transfer buffer*/

  unsigned char *curp; /*Current active pointer*/

  unsigned istemp; /*Temporary file indicator*/

  short token; /*Used for validity checking*/

  }FILE;

可知文件指针是对文件描述符的一个封装,使之能更好地对数据进行操作。那文件描述符与文件指针之间能不能转呢?
FILE* fdopen(int fd, char *mood):mood代表模式,指明:可读(r)、可写(w)、可读写(rw)、可执行(x)
文件描述符---------------->文件指针
int fileno(FILE *stream)
文件指针-------------------->文件描述符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值