创建没有文件句柄的 GNU C 文件描述符
Create GNU C File Descriptor Without File Handle
如果我想将物理文件与其他类型的流(如套接字)一起使用,我可以简单地将文件句柄转换为文件描述符:
#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");
看来我需要注意我完全知道描述符是如何不隐式绑定到任何特定文件的。我写 "obtain a physical file's descriptor" 时误导了我;我应该写的是 "create a descriptor enabling access to a specific physical file".
没有。
不过,您可以直接使用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>
。 header就这么多,不知道有没有必要
如果我想将物理文件与其他类型的流(如套接字)一起使用,我可以简单地将文件句柄转换为文件描述符:
#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");
看来我需要注意我完全知道描述符是如何不隐式绑定到任何特定文件的。我写 "obtain a physical file's descriptor" 时误导了我;我应该写的是 "create a descriptor enabling access to a specific physical file".
没有。
不过,您可以直接使用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>
。 header就这么多,不知道有没有必要