2.Linux文件IO基础
Linux 文件 I/O(Input/Output)基础是 Linux 应用程序开发中的重要组成部分。在 Linux 系统中,文件 I/O 涉及到文件的读取和写入,以及文件描述符、系统调用等概念。以下是 Linux 文件 I/O 的基础知识:
(图片来源网络,侵删)
1. 文件描述符
在 Linux 中,每个打开的文件都与一个文件描述符相关联。文件描述符是一个非负整数,表示进程中打开文件的引用。通常,文件描述符的值为 0、1 和 2,分别代表标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。
2. 打开文件
要在 Linux 中进行文件 I/O,首先需要打开文件。open 系统调用用于打开或创建文件,并返回文件描述符。
#include #include int main() { // 打开文件 example.txt,如果不存在则创建,以读写方式打开 int fileDescriptor = open("example.txt", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR); // 其他文件 I/O 操作... // 关闭文件 close(fileDescriptor); return 0; }
3. 读取文件
read 系统调用用于从文件中读取数据。它接受文件描述符、缓冲区地址和读取的字节数作为参数。
#include #include #include int main() { int fileDescriptor = open("example.txt", O_RDONLY); char buffer[256]; // 从文件中读取数据到缓冲区 ssize_t bytesRead = read(fileDescriptor, buffer, sizeof(buffer)); // 处理读取的数据 std::cout int fileDescriptor = open("example.txt", O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR); const char* data = "Hello, Linux!"; // 将数据写入文件 ssize_t bytesWritten = write(fileDescriptor, data, strlen(data)); // 处理写入的数据... close(fileDescriptor); return 0; } int fileDescriptor = open("example.txt", O_RDWR); off_t offset = lseek(fileDescriptor, 5, SEEK_SET); // 将文件指针移动到文件开头后的第 5 个字节 // 处理文件指针位置... close(fileDescriptor); return 0; } int fileDescriptor = open("example.txt", O_RDWR); // 其他文件 I/O 操作... // 关闭文件 close(fileDescriptor); return 0; } int fileDescriptor = open("nonexistent_file.txt", O_RDONLY); if (fileDescriptor == -1) { perror("Error opening file"); std::cerr struct stat fileInfo; if (stat("example.txt", &fileInfo) == 0) { std::cout perror("Error getting file information"); } return 0; } int fileDescriptor = creat("newfile.txt", S_IRUSR | S_IWUSR); if (fileDescriptor != -1) { // 文件创建成功 // 其他文件 I/O 操作... close(fileDescriptor); } else { perror("Error creating file"); } // 删除文件 if (unlink("newfile.txt") == 0) { // 文件删除成功 } else { perror("Error deleting file"); } return 0; } // 创建目录 if (mkdir("newdir", S_IRWXU | S_IRWXG | S_IRWXO) == 0) { // 目录创建成功 } else { perror("Error creating directory"); } // 删除目录 if (rmdir("newdir") == 0) { // 目录删除成功 } else { perror("Error deleting directory"); } return 0; } // 重命名文件 if (rename("oldfile.txt", "newfile.txt") == 0) { // 文件重命名成功 } else { perror("Error renaming file"); } // 移动文件 if (rename("sourcefile.txt", "targetdir/destinationfile.txt") == 0) { // 文件移动成功 } else { perror("Error moving file"); } return 0; }
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。