首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当输入: int fd = open("file");时,fd代表什么?

当输入: int fd = open("file");时,fd代表什么?
EN

Stack Overflow用户
提问于 2012-08-31 19:55:41
回答 5查看 27.6K关注 0票数 10

我正在研究C++中的I/O操作,我有一个问题。当打开文件时,如:

代码语言:javascript
复制
#include <fcntl.h>
int main() {
    unsigned char buffer[16];     
    int fd = open (argv[1], O_RDONLY);
    read(fd, buffer, sizeof(buffer));
    return 0;
}

在将文件传递给open方法时,变量fd如何将文件表示为整数?是否正在检索当前文件夹中的文件?如果我打印‘fd’变量,它会打印3。这是什么意思?

Ps。我知道还有其他几种方法来处理文件,比如stdio.h、fstream等,但这超出了这个问题的范围。Ds.

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-08-31 20:07:16

当将文件传递给open方法时,变量fd如何将文件表示为整数?

它是标识打开的文件的句柄;它通常称为文件描述符,因此得名为fd

当您打开文件时,操作系统会创建一些访问该文件所需的资源。它们存储在某种使用整数作为键的数据结构(可能是一个简单的数组)中;对open的调用返回该整数,以便当您向其传递read时,操作系统可以使用它来查找所需的资源。

是否正在重新存储当前文件夹中的文件?

它表示您打开的文件;它的文件名是argv[1],这是程序启动时传递给程序的第一个参数。如果该文件不存在,或者open由于某种原因失败,那么它的值为-1,并且不表示任何文件;在尝试对其执行任何操作之前,您确实应该检查一下。

如果我打印fd变量,它会打印3。这是什么意思?

它没有任何特殊的含义;但它有这个值,因为它是在C++中的cincoutcerr使用的input (0)、output (1)和error (2)流之后打开的第四个文件(或类似文件的东西)。

票数 15
EN

Stack Overflow用户

发布于 2012-08-31 19:58:08

因为这是为当前进程存储的资源表的索引。

每个进程都有自己的资源表,只需将索引传递给read/write/etc函数即可

通常,文件描述符是内核驻留数据结构中的条目的索引,其中包含所有打开的文件的详细信息。在POSIX中,这种数据结构称为文件描述符表,每个进程都有自己的文件描述符表。用户应用程序通过系统调用将抽象密钥传递给内核,内核将根据该密钥代表应用程序访问文件。应用程序本身不能直接读取或写入文件描述符表。

来自:http://en.wikipedia.org/wiki/File_descriptor

票数 6
EN

Stack Overflow用户

发布于 2012-08-31 20:03:18

open()返回文件的文件描述符,它是C类型的int。要了解有关文件描述符的更多信息,请参阅http://en.wikipedia.org/wiki/File_descriptor

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12214878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档