fopen函数是标准I/O库函数的一部分,它提供了更高级别的文件操作功能,例如缓冲、格式化输入输出等。而open函数直接与底层文件系统交互,提供了更底层的文件操作。linux下的fopen是open的封装函数,fopen最终还是要调用底层的系统调用open。选择使用open还是fopen取决于你的需求和使用环境。如果你需要更底层的文件操作或者在特定的系统调用接口上工作,可以选择使用open函数。如果你更倾向于使用标准C库函数以及提供的高级别文件操作功能,可以选择使用fopen函数。
open函数是一个在C语言中用于打开文件的系统调用函数。它提供了对文件的创建、打开和访问的功能。open函数的原型如下,可以指定打开方式和权限:
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
成功时,返回一个非负整数文件描述符,表示打开的文件;失败时,返回-1,并设置errno来指示错误类型。举例,以追加模式写入,权限为777:
int fd = open(filename, O_CREAT | O_WRONLY | O_APPEND, 0777);
关于详细的权限操作,可以参考https://fakerth.blog.csdn.net/article/details/135055061
open对应的文件操作有:close,read,write等,使用open进行一个简单的读写如下。
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
const char* filename = "example.txt";
const char* content = "Hello, World!";
size_t content_size = strlen(content);
// 打开文件以写入模式
int fd = open(filename, O_CREAT | O_WRONLY, 0666);
if (fd == -1) {
perror("Failed to open or create file");
return 1;
}
// 写入内容到文件
ssize_t bytes_written = write(fd, content, content_size);
if (bytes_written == -1) {
perror("Failed to write to file");
close(fd);
return 1;
}
// 关闭文件
close(fd);
// 重新打开文件以读取模式
fd = open(filename, O_RDONLY);
if (fd == -1) {
perror("Failed to open file for reading");
return 1;
}
// 分配缓冲区来存储读取的内容
char* buffer = (char*)malloc(content_size + 1);
if (buffer == NULL) {
perror("Failed to allocate buffer");
close(fd);
return 1;
}
// 读取文件内容到缓冲区
ssize_t bytes_read = read(fd, buffer, content_size);
if (bytes_read == -1) {
perror("Failed to read from file");
close(fd);
free(buffer);
return 1;
}
// 添加字符串结束符
buffer[content_size] = '\0';
// 输出读取的内容
printf("File content: %s\n", buffer);
// 关闭文件和释放资源
close(fd);
free(buffer);
return 0;
}
fopen函数是C标准库中的文件操作函数,用于打开文件并返回一个指向FILE结构的指针,以便进行后续文件操作。
#include <stdio.h>
FILE* fopen(const char* filename, const char* mode);
其中mode为打开文件的模式,是一个字符串参数,用于指定文件的访问模式和操作类型。常用的模式包括:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
const char* filename = "example.txt";
const char* content = "Hello, World!";
size_t content_size = strlen(content);
// 打开文件以写入模式
FILE* file = fopen(filename, "w");
if (file == NULL) {
perror("Failed to open or create file");
return 1;
}
// 写入内容到文件
size_t bytes_written = fwrite(content, sizeof(char), content_size, file);
if (bytes_written != content_size) {
perror("Failed to write to file");
fclose(file);
return 1;
}
// 关闭文件
fclose(file);
// 重新打开文件以读取模式
file = fopen(filename, "r");
if (file == NULL) {
perror("Failed to open file for reading");
return 1;
}
// 分配缓冲区来存储读取的内容
char* buffer = (char*)malloc(content_size + 1);
if (buffer == NULL) {
perror("Failed to allocate buffer");
fclose(file);
return 1;
}
// 读取文件内容到缓冲区
size_t bytes_read = fread(buffer, sizeof(char), content_size, file);
if (bytes_read != content_size) {
perror("Failed to read from file");
fclose(file);
free(buffer);
return 1;
}
// 添加字符串结束符
buffer[content_size] = '\0';
// 输出读取的内容
printf("File content: %s\n", buffer);
// 关闭文件和释放资源
fclose(file);
free(buffer);
return 0;
}