Linux系统编程8_文件I/O

Posted Grooovvve

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统编程8_文件I/O相关的知识,希望对你有一定的参考价值。

fcntl.h 头文件,file control的缩写。

 

open函数,openat函数:

int open(const char *path, int oflag);

int openat(int fd, const char *path, int oflag);

将准备打开的文件或是设备的名字作为参数path传给函数,oflags用来指定文件访问模式。

两个系统调用成功返回一个新的文件描述符,失败返回-1。两个函数返回的文件描述符一定是最小的未用描述符数值。

 

creat函数:

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

若成功,返回为只写打开的文件描述符;若出错,返回-1

 

close函数:

int close(int fd);

若成功返回0,若出错返回-1;

 

lseek函数:

off_t lseek(int fd, off_t offset, int whence);

若成功返回新的文件偏移量,若出错,返回为-1;

每个打开的文件都有一个与其相关联的“当前文件偏移量”,通常是一个非负整数。

用以度量从文件开始处计算的字节数。通常读写操作都从当前文件的偏移量处开始,并使偏移量增加所读写的字节数。

对参数offset的解释与参数whence有关:

若whence是SEEK_SET,则将该文件的偏移量设置为距文件开始处offset个字节;

若whence是SEEK_CUR,则将该文件的偏移量设置为其当前值加offset,offset可为正或负;

若whence是SEEK_END,则将该文件的偏移量设置为文件长度加offset,offset可正可负;

 

可用以下方式获取打开文件的偏移量:

off_t  curpos;

curpos = lseek(fd, 0, SEEK_CUR);

 

read函数:

ssize_t  read(int fd,  void *buf,  size_t nbytes);

调用read函数从打开文件中读数据;

返回值:读到的字节数,若已到文件尾,返回 0,若出错,返回-1;

 

write函数:

ssize_t  write(int fd, const void *buf, size_t nbytes);

返回值:若成功,返回已写的字节数;若出错,返回-1;

其返回值通常与参数nbytes的值相同,否则表示出错。write出错的一个常见原因是:磁盘已写满,或者超过了一个给定的进程的文件长度限制。

对于普通文件,写操作从文件的当前偏移量处开始。如果在打开该文件时,指定了O_APPEND选项,则在每次写操作之前,将文件偏移量设置在文件的当前结尾处。在一次成功写之后,该文件偏移量增加实际写的字节数。

 

以上是关于Linux系统编程8_文件I/O的主要内容,如果未能解决你的问题,请参考以下文章

Linux I/O重定向

linux系统编程之I/O内核数据结构

Linux系统编程:基本 I/O 系统调用

Linux系统编程IO标准缓冲区

网络编程笔记Linux系统常见的网络编程I/O模型简述

Linux Kernel文件系统写I/O流程代码分析