本文共 2720 字,大约阅读时间需要 9 分钟。
文件操作是Linux系统中常见的基础操作之一,主要包含打开文件、写入文件、读取文件和关闭文件等几个关键步骤。这些操作通过文件描述符(file descriptor)进行处理,与文件进行读写操作。
打开文件的主要操作由open()函数完成,函数可以按需创建文件或打开现有文件。使用open()函数时,需要注意以下几个关键点:
#include#include #include
int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);
O_RDONLY:只读模式O_WRONLY:只写模式O_RDWR:读写模式O_CREAT:如果文件不存在则创建O_APPEND:追加写入,内容附加到末尾O_TRUNC:截断文件长度,设置为0S_IRUSR:文件所有者读取权限S_IWUSR:文件所有者写入权限S_IRGRP:文件组成员读取权限S_IWGRP:文件组成员写入权限S_IROTH:其他用户读取权限S_IWOTH:其他用户写入权限errnoint filefd;if ((filefd = open("test.txt", O_RDWR | O_CREAT | O_TRUNC, 0666)) == -1) { printf("文件打开失败,错误信息为:%s\n", strerror(errno)); return -1;} write()函数用于将数据从程序写入开放的文件。该函数接收三个参数:
fd:文件描述符buf:要写入的数据缓冲区count:要写入的字节数ssize_t write(int fd, const void *buf, size_t count);
errnoif (rv = write(filefd, "Hello world!\n", strlen("Hello world!\n")) < 0) { printf("写入失败,错误信息为:%s\n", strerror(errno)); return -1;} read()函数用于从文件中读取数据。调用时需要指定缓冲区和要读取的字节数。函数返回实际读取的字节数:
ssize_t read(int fd, void *buf, size_t count);
fd:文件描述符buf:读取到缓冲区count:要读取的数据长度errnochar buf[1024];memset(buf, 0, sizeof(buf)); // 确保缓冲区初始为空if (rv = read(filefd, buf, sizeof(buf)) < 0) { printf("读取失败,错误信息为:%s\n", strerror(errno)); return -1;} close()函数用于关闭已经打开的文件,释放系统资源。函数接收文件描述符作为参数:
int close(int fd);
errno#include#include #include #include #include #include #include #include #define BUF_SIZE 1024 #define CONTENT "Hello World\n" int main(int argc, char **argv) { int filefd; int rv; char buf[BUF_SIZE]; // 打开文件 if ((filefd = open("test.txt", O_RDWR | O_CREAT | O_TRUNC, 0666)) == -1) { printf("文件打开失败,错误信息为:%s\n", strerror(errno)); return -1; } printf("成功打开文件,文件描述符为:%d\n", filefd); // 写入文件 if ((rv = write(filefd, CONTENT, strlen(CONTENT))) < 0) { printf("写入文件失败,错误信息为:%s\n", strerror(errno)); return -1; } printf("已成功写入文件%d字节\n", rv); // 读取文件 memset(buf, 0, sizeof(buf)); // 初始化缓冲区 rv = read(filefd, buf, sizeof(buf)); if (rv < 0) { printf("读取文件失败,错误信息为:%s\n", strerror(errno)); return -1; } printf("读取结果:\n%s\n", buf); // 关闭文件 if ((rv = close(filefd)) < 0) { printf("文件关闭失败,错误信息为:%s\n", strerror(errno)); return -1; } printf("所有操作完成\n"); return 0; }
以上代码示例展示了使用open、write、read和close函数完整的文件操作流程,并确保每一步都进行了错误处理和资源释放。通过合理使用这些函数,开发者可以对文件进行读写操作,实现文件管理的需求。
转载地址:http://idkaz.baihongyu.com/