1. 打开文件
在Linux中,可以使用系统调用open
或C标准库函数fopen
来打开文件。open
是较底层的系统调用,而fopen
提供了更高级的文件操作接口。
使用open
系统调用打开文件:
#include <fcntl.h>
#include <stdio.h>
int main() {
int file = open("example.txt", O_RDONLY);
if (file == -1) {
perror("Error opening file");
return 1;
}
// 文件操作...
close(file);
return 0;
}
使用fopen
标准库函数打开文件:
#include <stdio.h>
int main() {
FILE* file = fopen("example.txt", "r");
if (file == NULL) {
perror("Error opening file");
return 1;
}
// 文件操作...
fclose(file);
return 0;
}
2. 读取文件内容
打开文件后,我们可以使用read
系统调用或fread
标准库函数来读取文件内容。
使用read
系统调用读取文件内容:
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#define BUFFER_SIZE 1024
int main() {
int file = open("example.txt", O_RDONLY);
if (file == -1) {
perror("Error opening file");
return 1;
}
char buffer[BUFFER_SIZE];
ssize_t bytesRead;
while ((bytesRead = read(file, buffer, sizeof(buffer))) > 0) {
// 处理读取的数据
write(STDOUT_FILENO, buffer, bytesRead); // 输出到标准输出
}
close(file);
return 0;
}
使用fread
标准库函数读取文件内容:
#include <stdio.h>
#define BUFFER_SIZE 1024
int main() {
FILE* file = fopen("example.txt", "r");
if (file == NULL) {
perror("Error opening file");
return 1;
}
char buffer[BUFFER_SIZE];
size_t bytesRead;
while ((bytesRead = fread(buffer, 1, sizeof(buffer), file)) > 0) {
// 处理读取的数据
fwrite(buffer, 1, bytesRead, stdout); // 输出到标准输出
}
fclose(file);
return 0;
}
3. 写入文件内容
除了读取文件内容,我们还可以使用write
系统调用或fwrite
标准库函数来向文件写入内容。
使用write
系统调用写入文件内容:
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
int main() {
int file = open("example.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);
if (file == -1) {
perror("Error creating file");
return 1;
}
char data[] = "This is some data to be written.";
write(file, data, sizeof(data) - 1); // -1是为了不写入字符串的结尾空字符'\0'
close(file);
return 0;
}
使用fwrite
标准库函数写入文件内容:
#include <stdio.h>
int main() {
FILE* file = fopen("example.txt", "w");
if (file == NULL) {
perror("Error creating file");
return 1;
}
char data[] = "This is some data to be written.";
fwrite(data, 1, sizeof(data) - 1, file);
fclose(file);
return 0;
}
4. 错误处理
在文件读写过程中,错误可能随时发生。为了保证程序的稳定性,必须进行适当的错误处理。
使用perror
打印错误信息:
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
int file = open("example.txt", O_RDONLY);
if (file == -1) {
perror("Error opening file");
return 1;
}
// 文件操作...
close(file);
return 0;
}
5. 结论
文件读写是Linux系统编程中必不可少的一部分。本文全面解析了文件读写操作,涵盖了打开文件、读取文件内容、写入文件内容以及错误处理的方方面面。希望本文能帮助读者理解文件读写的基本原理,并能在Linux编程中熟练应用。