【UNIX环境高级编程】文件IO详解

定义:文件I/O指的是对文件的输入、输出操作,简单来说就是对文件的读/写操作。

文件描述符

对于内核而言,所有打开的文件都通过文件描述符引用,文件描述符是一个非负整数,当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符,当读或写一个文件时,使用open或create返回的文件描述符标识该文件,将其作为参数传送给read或write。
UNIX系统shell使用文件描述符0与进程的标准输入相关联,文件描述符1与标准输出相关联,文件描述符2与标准出错输出相关联。

open函数

打开文件,创建文件

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

//pathname 文件路径 flags 标志(行为)
int open(const char *pathname, int flags);
//创建文件 mode 设置权限
int open(const char *pathname, int flags, mode_t mode);

只有创建文件的时候才会使用第三个参数mode。

  • 参数一pathname:是要打开或创建文件的名字。
  • 参数二flags:可用来说明此函数的多个选项,可以用一个或多个常量进行"或"运算构成flags参数。
  • O_RDONLY:只读打开;
  • O_WRONLY:只写打开;
  • O_RDWR:读、写打开;
  • O_APPEND:每次写时都追加到文件的尾端;
  • O_CREAT:若文件不存在则创建它;如果使用这个则必须使用第三个参数mode;
  • O_EXCL:如果同时指定了O_CREAT,而文件已经存在,则会出错,用此测试一个文件是否存在,如果不存在则创建此文件;
  • O_TRUNC:如果文件存在,而且为只写或读写成功打开,则将其长度截断为0;
  • O_NONBLOCK:如果pathname指的是一个FIFO,一个块特殊文件或一个字符特殊文件,则此选项为文件的本次打开操作和后续的IO操作设置非阻塞模式;
  • O_NOCTTY:如果pathname指的是终端设备,则不将该设备分配作为此进程的控制终端;
  • O_DSYNC:使每次write等物理IO操作完成,但是如果写操作并不影响读取刚写入的数据,则不等待文件属性被更新;
  • O_RSYNC:使每一个以文件描述符作为参数的read操作等待,直至任何对文件同一部分进行的未决写操作都完成;
  • O_SYNC:使每次write都等到物理IO操作完成,包括由write操作引起的文件属性更新所需的IO;

creat函数

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

#include <fcntl.h>

int creat(const char *pathname, mode_t mode);

close函数

调用close函数关闭一个打开的文件。关闭一个文件时还会释放该进程加在该文件上的所有记录锁。若成功返回0,失败返回-1。
当一个进程终止文件时,内核自动关闭它所有打开的文件,很多程序都利用了这一功能而不显示地用close关闭打开的文件。

#include 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值