【发布时间】:2016-02-05 00:15:53
【问题描述】:
如果我想将物理文件与其他类型的流(例如套接字)一起使用,我可以简单地将文件句柄转换为文件描述符:
#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");
看来我需要注意的是,我完全知道描述符是如何不隐式绑定到任何特定文件的。当我写“获取物理文件的描述符”时,我被误导了;我应该写的是“创建一个能够访问特定物理文件的描述符”。
【问题讨论】:
-
物理文件没有文件描述符。
-
@KeithThompson 好悲痛
-
这是什么意思?一个文件描述符可能与一个物理文件相关联——就此而言,多个文件描述符可能与一个给定的物理文件相关联(在同一进程内)。如果您正在寻找
open()调用,它会分配一个新的文件描述符并将其与指定的物理文件相关联。 -
文件描述符不能唯一标识特定的磁盘文件...它们标识您的程序打开的文件(和其他东西)。未打开的文件没有文件描述符,并且您拥有的任何给定文件描述符都可能对应于几乎任何内容,具体取决于您的程序打开了什么。
标签: c gnu file-descriptor