Linux 非缓冲I/O

在linux系统中,文件的I/O分为两种类型,第一种类型是非缓冲式文件操作,主要是由系统调用提供,另一种是缓冲式I/O操作,主要是由C语言的标准输入输出库函数提供。这里学习一下非缓冲式文件I/O操作,下面简称I/O.

非缓冲的文件I/O

非缓冲式文件操作适用于小规模文件的读写,或者是实时设备,执行非缓冲式文件操作,应用程序能够立即得到数据。非缓冲式文件操作的函数主要是由系统调用提供。操作系统内核利用文件描述符来访问文件;文件标识符是一个非负整数,系统预留了3个文件标识符:

  • 0 代表标准输入,即通过键盘输入
  • 1 代表标准输出,即输出到终端
  • 2 标准错误,系统中存放错误信息的堆栈

文件的读写与访问

1、open

int open(path,flag,mode);打开一个文件
函数的基本结构,path为文件路径,flag为一些参数,当文件是新建时mode用来指定文件访问属性;

flag常用值:O_RDONLY ; O_WRONLY ; O_RDWR ; 分别为只读,只写,读写方式
mode常用值: S_IRWXU ; S_IRWXG ; S_IRWXO ;分别代表用户,组,其他的读写执行权限;

2、creat

int creat(path,modo);创建一个文件,只写方式
参数与open相同;
相当于:open(path,O_WRONLY | O_CREAT | O_TRUNC, mode);

3、close

int close(int fd);关闭一个文件,成功返回0,失败-1
fd为文件描述符;

4、lseek

off_t lseek(int fd, off_t offset, int whence); 返回文件偏移量

5、read

ssize_t read(int fd, void *buf, size_t count); 读文件
count为需要读取的字节数,返回读到的字节数

6、write

ssize_t write(int fd, void *buf, size_t count); 写文件
count为需要写入的字节数,返回已写的字节数

7、chmod,fchmod

int chmod(filename,mode);
int fchmod(fd,mode)
改变文件访问权限,成功返回0,失败-1,区别在于前一个通过文件名访问,后一个通过文件描述符;

8、chown,fchown,lchown

int chown(filename,newowner,newgroup);
int fchown(fd,newowner,newgroup);
int lchown(filename,newowner,newgroup);
改变文件所有者,区别在于第一个利用文件名,第二个为打开的文件(文件描述符),第三个针对链接文件

9、rename

int rename(oldname,newname);
文件重命名,成功返回0,失败-1

sys/types.h :定义了某些与实现相关的数据类型,被称为基本系统数据类型

dup/dup2

int dup(fd);
int duo2(fd, fd2); 复制文件描述符

你可能感兴趣的:(linux,i-o)