理解Unix文件描述符

时间:2011-09-13 10:58:35

标签: sockets

来自Beej的套接字编程书:

  

当Unix程序执行任何类型的I / O时,他们通过阅读或执行此操作   写入文件描述符。文件描述符只是一个整数   与打开的文件相关联。

是否说程序读取并“写入”“整数”?如果是,那怎么可能呢?它是什么意思?

3 个答案:

答案 0 :(得分:2)

这意味着,为了从文件读取或写入文件,您需要执行系统调用,并且您的文件描述符(整数)是用于告诉内核您正在讨论哪个文件的参数。它们是整数的事实相对无趣,它们可能是任何东西;你只是透明地使用它们,也就是说,你打开一个文件,存储描述符,然后你将描述符传递回内核,以便对该文件进行任何操作。它的价值只对内核有意义。一个值得注意的例外是特殊文件描述符0,1和2(stdin,stdout和stderr),但即使对于那些,您通常使用预定义常量而不是文字整数值。

答案 1 :(得分:2)

我也在使用文件描述符和 beejs 书。启蒙的时刻是我理解 c dup 功能如何运作的时刻。

PS:这是迟到的答案,但也许它可以帮助某人

答案 2 :(得分:1)

它说文件描述符是作为整数实现的。也就是说,每个打开的文件都有一种独特的引用方式,一个文件句柄实际上只是一个唯一的数字。

当你这样做时:

int fd = open("filename", flags);

fd是一个整数,由实现返回。它是您在程序中打开并提供给您的文件所特有的,以便稍后您可以引用该文件,例如对于read / write / close等等。它只不过是用于关联一系列操作的令牌。