创建没有文件句柄的 GNU C 文件描述符

标签 c gnu file-descriptor

如果我想将物理文件与其他类型的流(如套接字)一起使用,我可以简单地将文件句柄转换为文件描述符:

#include <stdlib.h>
#include <stdio.h>

int main(void) {
        FILE *f = fopen("uniquefilename.ext", "w");
        int fd = fileno(f);
        printf("%d\n", fd);
        fclose(f);
        return 0;
}

GNU 标准库是否提供直接获取物理文件描述符的方法?效果如下:

int fd = some_call("file_name.ext", "mode");

看来我需要注意我完全知道描述符是如何不隐式绑定(bind)到任何特定文件的。当我写“获取物理文件的描述符”时,我误导了;我应该写的是“创建一个能够访问特定物理文件的描述符”。

最佳答案

它没有。

但是,您可以使用 open 直接运行!这是 Linux 本身的一部分,而不是 C 标准库(从技术上讲,C 标准库提供了一个小的包装器,允许您将其作为 C 函数调用)。

示例用法:

int fd = open("file_name.ext", O_RDWR); // not fopen
// do stuff with fd
close(fd); // not fclose

注意:手册页建议包括 <sys/types.h> , <sys/stat.h> , 和 <fcntl.h> , 以及 close你需要<unistd.h> . header 就那么几个,不知道有没有必要。

关于创建没有文件句柄的 GNU C 文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35214168/

相关文章:

c - 如何暂停 pthread 程序的执行,以便检查线程的 pid 和 tgid?

linux - 如何使用命令行编辑配置文件?

c - 有没有办法从 gzFile 获取文件描述符

c++ - 奇怪的代码错误

c - 当我们可以简单地做到这一点时,为什么要在创建链表时创建堆呢?

bash - 读取 makefile 中的文件

sockets - Spring Integration TCP-什么是完​​全关闭监听套接字的好方法

java - Android Java IOException 从文件描述符/输入流读取失败 EBADF(错误文件号)

c - 使用结构体添加两个二维数组时出现段错误 11

makefile - GNU make 产生 "commands commence before first target"错误