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

时间:2016-02-05 00:15:54

标签: 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");

我似乎需要注意,我完全知道描述符是如何不隐式绑定到任何特定文件的。当我写“#34;获取物理文件的描述符&#34 ;;时,我误导了我;我应该写的是&#34;创建一个描述符,允许访问特定的物理文件&#34;。

1 个答案:

答案 0 :(得分:2)

没有。

但是,您可以直接使用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>。这是很多标题,我不知道它们是否都是必需的。