Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建不带文件句柄的GNUC文件描述符_C_Gnu_File Descriptor - Fatal编程技术网

创建不带文件句柄的GNUC文件描述符

创建不带文件句柄的GNUC文件描述符,c,gnu,file-descriptor,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);

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

#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;
}
我似乎需要注意,我完全知道描述符是如何不隐式绑定到任何特定文件的。我写“获取物理文件的描述符”时有误导性;我应该写的是“创建一个描述符,允许访问特定的物理文件”。

它没有

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

用法示例:

int fd = open("file_name.ext", O_RDWR); // not fopen
// do stuff with fd
close(fd); // not fclose
注意:手册页建议包括
,对于
关闭
,您需要
。这是相当多的标题,我不知道它们是否都是必需的。

它不是

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

用法示例:

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

注意:手册页建议包括
,对于
关闭
,您需要
。这是相当多的标题,我不知道它们是否都是必需的。

还要注意的是,Windows没有文件描述符,除非标准库模拟它们。谢谢!我知道我已经经常使用
unistd.h
,因为
read
write
。是的,我使用cygwin或debian。很长一段时间以前,我甚至不再费心安装windows SDK了。在Linux上可能不需要这些头文件,但如果您在不同的系统上编译,则可能需要包含所有这些头文件。我相信这不仅是Linux,而且是posix的一部分。还要注意,windows没有文件描述符,除非标准库模拟它们。谢谢!我知道我已经经常使用
unistd.h
,因为
read
write
。是的,我使用cygwin或debian。我很久以前就不再为安装windows SDK而烦恼了。在Linux上可能不需要这些头文件,但如果在不同的系统上编译,则可能需要包含所有这些头文件。我相信它是posix的一部分,而不仅仅是Linux。物理文件没有文件描述符。@KeithThompson good Grief这是什么意思?一个文件描述符可能与一个物理文件相关联——为此,多个文件描述符可能(在同一进程中)与一个给定的物理文件相关联。如果您正在查找
open()
调用,它将分配一个新的文件描述符并将其与指定的物理文件关联。文件描述符不会唯一标识特定的磁盘文件。。。它们标识程序已打开的文件(和其他内容)。未打开的文件没有文件描述符,根据您的程序已打开的内容,您拥有的任何给定文件描述符都可能与几乎任何内容对应。物理文件没有文件描述符。@KeithThompson good Grief这是什么意思?一个文件描述符可能与一个物理文件相关联——为此,多个文件描述符可能(在同一进程中)与一个给定的物理文件相关联。如果您正在查找
open()
调用,它将分配一个新的文件描述符并将其与指定的物理文件关联。文件描述符不会唯一标识特定的磁盘文件。。。它们标识程序已打开的文件(和其他内容)。未打开的文件没有文件描述符,您拥有的任何给定文件描述符都可能对应于几乎任何内容,这取决于您的程序已打开的内容。