Linux操作系统提供了一组丰富的文件操作函数,这些函数是进行文件和设备访问的基础,本文将详细介绍几个常用的文件操作函数,包括open、close、read、write和lseek,这些函数不仅在普通文件中使用广泛,也在设备文件和管道等特殊文件中有重要应用。
一、open函数
1. 功能描述:
open函数用于打开或创建一个文件,同时可以设置文件的访问权限。
2. 所需头文件:
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>
3. 函数原型:
int open(const char *pathname, int flags, mode_t mode);
4. 参数说明:
pathname: 要打开的文件路径。
flags: 文件打开方式,可以是以下几种的组合:
O_RDONLY: 以只读方式打开文件。
O_WRONLY: 以只写方式打开文件。
O_RDWR: 以读写方式打开文件。
O_CREAT: 如果文件不存在则创建文件,需要mode参数。
O_EXCL: 与O_CREAT联用,如果文件已存在则返回错误。
O_TRUNC: 如果文件存在则清空文件。
O_APPEND: 每次写操作都会在文件末尾追加数据。
O_NONBLOCK: 非阻塞模式。
O_SYNC: 同步写操作。
mode: 文件权限(如S_IRUSR, S_IWUSR, S_IXUSR)。
5. 返回值:
成功时返回文件描述符,失败时返回-1。
6. 示例代码:
#include <fcntl.h> #include <unistd.h> #include <stdio.h> int main() { int fd = open("example.txt", O_RDONLY); if (fd == -1) { perror("open"); return -1; } close(fd); return 0; }
二、close函数
1. 功能描述:
close函数用于关闭一个已经打开的文件描述符。
2. 所需头文件:
#include <unistd.h>
3. 函数原型:
int close(int fd);
4. 参数说明:
fd: 要关闭的文件描述符。
5. 返回值:
成功时返回0,失败时返回-1。
6. 示例代码:
#include <unistd.h> #include <stdio.h> int main() { int fd = open("example.txt", O_RDONLY); if (fd == -1) { perror("open"); return -1; } if (close(fd) == -1) { perror("close"); return -1; } return 0; }
三、read函数
1. 功能描述:
read函数用于从文件中读取数据。
2. 所需头文件:
#include <unistd.h>
3. 函数原型:
ssize_t read(int fd, void *buf, size_t count);
4. 参数说明:
fd: 文件描述符。
buf: 存储读取数据的缓冲区。
count: 要读取的字节数。
5. 返回值:
成功时返回读取的字节数,读到文件末尾返回0,出错返回-1。
6. 示例代码:
#include <unistd.h> #include <fcntl.h> #include <stdio.h> int main() { int fd = open("example.txt", O_RDONLY); if (fd == -1) { perror("open"); return -1; } char buffer[128]; ssize_t bytesRead = read(fd, buffer, sizeof(buffer) 1); if (bytesRead == -1) { perror("read"); close(fd); return -1; } buffer[bytesRead] = '