不带缓冲的I/O

    Unix系统中的大多数文件I/O只需要用到5个函数:open、read、write、lseek以及close。这些函数经常被称为不带缓冲的I/O。术语“不带缓冲”指的是每个read和write都调用内核中的一个系统调用。

文件描述符

    对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数,变化范围是0~OPEN_MAX(允许每个进程最多打开的文件数)。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读或写一个文件时,使用open或create返回的文件描述符标识该文件,将其作为参数传送给read或write。

open函数

    打开或创建一个文件。若成功则返回文件描述符,若出错则返回-1。

    #include<fcntl.h>
    int open(const char *pathname, int oflag, ... /* mode_t mode */);

    仅当创建新文件时才使用第三个参数。

create函数

    创建一个新文件。若成功则返回为只写打开的文件描述符,若出错则返回-1。

    #include<fcntl.h>
    int create(const char *pathname, mode_t mode);

    create的一个不足之处是它以只写方式打开所创建的文件。现在open函数提供了选项O_CREATE和O_TRUNC,于是也就不再需要create函数。

close函数

    关闭一个打开的文件。若成功则返回0,若出错则返回-1。

    #include<unistd.h>
    int close(int filedes);

    关闭一个文件时还会释放该进程加在该文件上的所有记录锁。

    当一个进程终止时,内核自动关闭它所有打开的文件。很多程序都利用这一功能而不显示地用close关闭打开的文件。

lseek函数

    显示地为一个打开的文件设置其偏移量。若成功则返回新的文件偏移量,若出错则返回-1。

    #include<unistd.h>
    off_t lseek(int filedes, off_t offset, int whence);

    每个打开的文件都有一个与其相关联的“当前文件偏移量”,它通常是一个非负整数,用以度量从文件开始处计算的字节数。通常,读、写操作都从当前文件偏移量处开始,并使偏移量增加所读写的字节数。按系统默认的情况,当打开一个文件时,除非指定O_APPEND选项,否则该偏移量设置为0。

转载于:https://www.cnblogs.com/mikelin/archive/2010/12/21/1912804.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值