
在Linux中,文件描述符(file descriptor, fd)和FILE指针(也称为文件流指针,FILE pointer)是两种常见的文件操作接口。文件描述符是一个整数,通过系统调用直接操作文件,而FILE指针是通过C标准库函数操作文件。
使用fdopen函数可以将一个已经打开的文件描述符转换为FILE指针。
函数原型如下所示:
FILE *fdopen(int fd, const char *mode);示例如下:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int main() {
// 打开一个文件并获得文件描述符
int fd = open("example.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);
if (fd == -1) {
perror("Failed to open file");
return 1;
}
// 将文件描述符转换为 FILE 指针
FILE *file = fdopen(fd, "w");
if (file == NULL) {
perror("Failed to convert fd to FILE*");
close(fd);
return 1;
}
// 使用 FILE 指针进行写操作
fprintf(file, "Hello, FILE pointer!\n");
// 关闭 FILE 指针,注意这也会关闭文件描述符
fclose(file);
return 0;
}使用fileno函数可以从一个FILE指针中获取对应的文件描述符。
函数原型如下所示:
int fileno(FILE *stream);示例如下:
#include <stdio.h>
int main() {
// 打开一个文件并获得 FILE 指针
FILE *file = fopen("example.txt", "w");
if (file == NULL) {
perror("Failed to open file");
return 1;
}
// 从 FILE 指针中获取文件描述符
int fd = fileno(file);
if (fd == -1) {
perror("Failed to convert FILE* to fd");
fclose(file);
return 1;
}
// 使用文件描述符进行写操作
const char *text = "Hello, file descriptor!\n";
if (write(fd, text, strlen(text)) == -1) {
perror("Failed to write to file");
}
// 关闭 FILE 指针,这也会关闭文件描述符
fclose(file);
return 0;
}注意事项
通过上述示例和说明,可以在Linux程序中灵活地在文件描述符和FILE指针之间转换,根据需要选择合适的接口进行文件操作。
作者:不脱发的程序猿。原文:https://handsome-man.blog.csdn.net/article/details/139250899 。原文日期:2024-07-02。转载遵循 CC BY-SA 4.0,保留署名与来源。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。