2011-09-13 280 views
0

从Beej的socket编程书:了解Unix文件描述

当Unix程序做任何形式的I/O,他们通过阅读或 写入文件描述符做到这一点。文件描述符只是一个与打开文件关联的整数 。

是不是说程序读取“写”到“整数”?如果是的话,那怎么可能?它是什么意思?

回答

1

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

当你这样做:

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

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

+0

,我不明白'文件描述符作为integer.'详细精心实施,请。 –

+0

这就是我已经知道,但报价是说,该程序写入“上”的整数?这是否意味着它们只能使用该整数来引用他们必须使用该整数写入的文件? –

+0

@Anisha - 报价表示“读取或写入文件描述符”。文件描述符就是你从'open'返回的内容。当您调用'read(fd,...)'时,您正在请求从特定的文件描述符中读取数据。同样,'write(fd,...)'是写入特定文件描述符的请求。 – Flexo

2

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

+0

太棒了,这是否意味着beej的定义是不明确的?他们说这些程序在这个整数上写“on”。 –

+1

@Anisha:关键在“关联”一词中。整数*表示文件,而不是文件。说明有点误导,但IMO并不多。 – tdammers

+0

无论您在阅读什么内容,请尝试与作者一起思考......经常,放入上下文时事情会变得清晰。 – tdammers

2

我在文件描述符和beejs书也苦苦挣扎。启蒙的时刻是当我明白如何c dup功能的作品。

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