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选项,则在每次写操作之前,将文件偏移量设置在文件的当前结尾处。在一次成功写之后,该文件偏移量增加实际写的字节数。

原文地址:https://www.cnblogs.com/grooovvve/p/14106039.html