创建GNU C文件描述符没有文件句柄
问题描述:
如果我想使用其他类型数据流,如插座沿着一个物理文件,我可以简单地转换的文件句柄到文件描述符:创建GNU C文件描述符没有文件句柄
#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");
看来我需要说明,我完全知道如何描述符是不是隐含绑定到任何特定的文件。当我写下“获取物理文件的描述符”时,我误导了;我应该写的东西就像“创建一个描述符来访问特定的物理文件”。
答
它没有。
但是,您可以直接使用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>
。这是相当多的标题,我不知道它们是否都是必要的。
物理文件没有文件描述符。 –
@凯特汤普森好悲伤 – motoku
这是什么意思?文件描述符可以与物理文件相关联 - 就此而言,多个文件描述符可以与给定的物理文件相关联(在同一进程内)。如果你正在寻找'open()'调用,它会*分配一个新的文件描述符并将它与指定的物理文件关联起来。 –