【发布时间】:2011-09-13 10:58:35
【问题描述】:
来自 Beej 的套接字编程书:
当 Unix 程序执行任何类型的 I/O 时,它们通过读取或 写入文件描述符。文件描述符只是一个整数 与打开的文件相关联。
它是否说程序读取和“写入”到“整数”?如果是,怎么可能?这意味着什么?
【问题讨论】:
标签: sockets
来自 Beej 的套接字编程书:
当 Unix 程序执行任何类型的 I/O 时,它们通过读取或 写入文件描述符。文件描述符只是一个整数 与打开的文件相关联。
它是否说程序读取和“写入”到“整数”?如果是,怎么可能?这意味着什么?
【问题讨论】:
标签: sockets
这意味着为了读取或写入文件,您需要执行系统调用,并且您的文件描述符(整数)是您用来告诉内核您正在谈论的文件的参数。它们是整数的事实相对无趣,它们可以是任何东西;您只能透明地使用它们,也就是说,您打开一个文件,存储描述符,然后将描述符传递回内核以对该文件进行任何操作。它的值只对内核感兴趣。一个值得注意的例外是特殊文件描述符 0、1 和 2(stdin、stdout 和 stderr),但即使是这些,您通常也使用预定义的常量而不是文字整数值。
【讨论】:
我也为文件描述符和 beejs 书苦苦挣扎。当我理解 c dup 函数的工作原理时,我顿悟了。
PS:这是一个迟到的答案,但也许它可以帮助某人
【讨论】:
这是说文件描述符被实现为一个整数。也就是说,每个打开的文件都有一个唯一的引用方式,一个文件句柄实际上只是一个唯一的数字。
当你这样做时:
int fd = open("filename", flags);
fd 是一个整数,由实现返回。它对于您在程序中打开并提供给您的文件是唯一的,以便稍后您可以引用同一个文件,例如对于read/write/close等。它只不过是一个用于关联一系列操作的令牌。
【讨论】:
file descriptors are implemented as an integer.请详细说明。
open 得到的。当您调用read(fd, ...) 时,您正在发出从特定文件描述符读取的请求。同样write(fd, ...) 是写入特定文件描述符的请求。
write(fd, ...) is a request to write to a file descriptor 你不能写入整数吗?你可以吗?您可以使用该整数来“引用”您打算写入的某个文件吗?