怎样在国外网站上做外贸广告,c 如何拖控件做网站,四川省中国建设银行招聘信息网站,wordpress news listUNIX中的一切事物都是文件#xff08;
everything in Unix is a file!#xff09;当我在这篇教程中提到UNIX的时候#xff0c;其意思专指符合UNIX标准的所谓“正统”UNIX的衍生系统#xff08;其实我就用来带指那些买了最初UNIX源代码的商业系统#xff09;操作系统和类似…UNIX中的一切事物都是文件
everything in Unix is a file!当我在这篇教程中提到UNIX的时候其意思专指符合UNIX标准的所谓“正统”UNIX的衍生系统其实我就用来带指那些买了最初UNIX源代码的商业系统操作系统和类似LinuxBSD这些类UNIX系统。如果某些要点是Linux特有的或者因为本人孤陋寡闻暂时搞不清楚是Linux特有的还是UNIX通用的我就会指明是Linux甚至其发行版我本人在写这篇教程的时候是以Debian GNU/Linux 4.0 etch为测试平台的。我们学习UNIX的时候恐怕听到的第一句话就是这句UNIX中一切都是文件。这是UNIX的基本理念之一也是一句很好的概括。比如很多UNIX老鸟会举出个例子来“你看/dev/hdc是个文件它实际上也是我的光盘……”UNIX中的文件可以是网络连接network connection输入输出FIFO管道a pipe终端terminal硬盘上的实际文件或者其它任何东东。文件与文件描述符file file descriptor你可能对上一章中建模类中的int还记忆犹新。我们用int在描述socket实际上所有的文件描述符都是int没错用的是一个整数类型。如果你觉得这样让你很难接受那么恭喜你你跟我一样也许是深中C面向对象思想的毒了^^。因为是int所以文件描述符不可能是C概念中的对象因为int无法发出行为但是这并不代表也不能接受一个动作哈。PASCAL之父在批判面向对象思想教条的时候曾经生动的举了个例子“在OOP的概念中绝对不应该接受ab这种表达的 OOP对这个问题的表达应该是a.add(b)”。fdfile descriptor可以作为接受动作的对象但是本身却无法发出动作这就如同一个只能做宾语不能做主语的名词是个不完整的对象。但是请别忘了Linux和socket本身是C语言的产物我们必须接受在面向过程时代下的产物正视历史——当然这与我们自己再进行OOP的封装并不矛盾。我们应该记住3个已经打开的fd0标准输入STDIN_FILENO1标准输出STDOUT_FILENO2标准错误STDERR_FILENO。以上宏定义在unistd.h中一个最简单的使用fd的例子就是使用unistd.h中的函数write(1, Hello, World!\n, 20);在标准输出上显示“Hello, World!”。另外一个需要注意的问题是file和fd并非一定是一一对应的。当一个file被多个程序调用的时候会生成相互独立的fd。这个概念可以类比于C中的引用eg: int rTmp tmp;。socket与file descriptor文件是应用程序与系统包括特定硬件设备之间的桥梁而文件描述符就是应用程序使用这个“桥梁”的接口。在需要的时候应用程序会向系统申请一个文件然后将文件的描述符返回供程序使用。返回socket的文件通常被创建在/tmp或者/usr/tmp中。我们实际上不用关心这些文件仅仅能够利用返回的socket描述符就可以了。好了说了这么多实际上就解释了一个问题“为什么socket的类型是int” -_-!!!