2016-02-05 193 views
0

如果我想使用其他类型数据流,如插座沿着一个物理文件,我可以简单地转换的文件句柄到文件描述符:创建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"); 

看来我需要说明,我完全知道如何描述符是不是隐含绑定到任何特定的文件。当我写下“获取物理文件的描述符”时,我误导了;我应该写的东西就像“创建一个描述符来访问特定的物理文件”。

+1

物理文件没有文件描述符。 –

+0

@凯特汤普森好悲伤 – motoku

+0

这是什么意思?文件描述符可以与物理文件相关联 - 就此而言,多个文件描述符可以与给定的物理文件相关联(在同一进程内)。如果你正在寻找'open()'调用,它会*分配一个新的文件描述符并将它与指定的物理文件关联起来。 –

回答

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>。这是相当多的标题,我不知道它们是否都是必要的。

+0

还要注意,Windows *没有*文件描述符,除非标准库模拟它们。 – immibis

+0

谢谢!我知道我通常使用'unistd.h',因为'read'和'write'。 – motoku

+0

是的,我使用cygwin或debian。我很久以前就停止了安装windows sdks的打扰 – motoku