输入时fd表示的是什么:int fd = open("file");?

Rox*_*Rox 10 c++ io file

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

#include <fcntl.h>
int main() {
    unsigned char buffer[16];     
    int fd = open (argv[1], O_RDONLY);
    read(fd, buffer, sizeof(buffer));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

将变量fd传递给open方法时,变量如何将文件表示为整数?它是否重复当前文件夹中的文件?如果我打印'fd'变量,它会打印3.这是什么意思?

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

Mik*_*our 13

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

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

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

它是否重复当前文件夹中的文件?

它代表您打开的文件; 它的文件名是argv[1],它在启动时传递给程序的第一个参数.如果该文件不存在,或open由于某种原因失败,则它具有值-1并且不代表任何文件; 在你尝试用它做任何事之前,你真的应该检查一下.

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

它没有任何特别的意义; 但其具有价值,因为它是第四文件(或类似文件的东西),其打开时,输入(0),输出(1)之后和误差(2)由使用的流cin,coutcerr在C++中.


dyn*_*mic 6

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

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

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

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