我正在研究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;
}在将文件传递给open方法时,变量fd如何将文件表示为整数?是否正在检索当前文件夹中的文件?如果我打印‘fd’变量,它会打印3。这是什么意思?
Ps。我知道还有其他几种方法来处理文件,比如stdio.h、fstream等,但这超出了这个问题的范围。Ds.
发布于 2012-08-31 20:07:16
当将文件传递给open方法时,变量fd如何将文件表示为整数?
它是标识打开的文件的句柄;它通常称为文件描述符,因此得名为fd。
当您打开文件时,操作系统会创建一些访问该文件所需的资源。它们存储在某种使用整数作为键的数据结构(可能是一个简单的数组)中;对open的调用返回该整数,以便当您向其传递read时,操作系统可以使用它来查找所需的资源。
是否正在重新存储当前文件夹中的文件?
它表示您打开的文件;它的文件名是argv[1],这是程序启动时传递给程序的第一个参数。如果该文件不存在,或者open由于某种原因失败,那么它的值为-1,并且不表示任何文件;在尝试对其执行任何操作之前,您确实应该检查一下。
如果我打印fd变量,它会打印3。这是什么意思?
它没有任何特殊的含义;但它有这个值,因为它是在C++中的cin、cout和cerr使用的input (0)、output (1)和error (2)流之后打开的第四个文件(或类似文件的东西)。
发布于 2012-08-31 19:58:08
因为这是为当前进程存储的资源表的索引。
每个进程都有自己的资源表,只需将索引传递给read/write/etc函数即可
通常,文件描述符是内核驻留数据结构中的条目的索引,其中包含所有打开的文件的详细信息。在POSIX中,这种数据结构称为文件描述符表,每个进程都有自己的文件描述符表。用户应用程序通过系统调用将抽象密钥传递给内核,内核将根据该密钥代表应用程序访问文件。应用程序本身不能直接读取或写入文件描述符表。
来自:http://en.wikipedia.org/wiki/File_descriptor
发布于 2012-08-31 20:03:18
open()返回文件的文件描述符,它是C类型的int。要了解有关文件描述符的更多信息,请参阅http://en.wikipedia.org/wiki/File_descriptor。
https://stackoverflow.com/questions/12214878
复制相似问题