|
|
首先是文件描述符和文件指针的区别?
我们知道,文件指针是指向一个FILE struct的,这个结构体里面有一个元素就是文件描述符。
然而,我在测试close和fclose时,发现,一旦文件描述符和文件指针一建立,不会因为调用close和fclose而消亡,它们依然存在,值也不会变的,当然已经无法使用了。
我现在的问题是:
既然FILE中包含文件描述符元素,是否可以用fopen()直接获取指针pf,然后使用pf->_file_descriptoe 表达式 取出文件描述符fd,这个fd是否和调用open()所获得的文件描述符一致??
因为fd是唯一的,我无法测试。
另外一个有趣的问题是:
我使用fputs()测试文件描述符(fd)和文件指针(fp)是否通用,发现并不能相互通用,但是有个奇怪的问题,我们知道putchar()吧 它实际上是fputc()函数的宏:
#define putchar(c) fputc(c,stdout)
其中,stdout是系统的标准输出文件描述符,值为1。
问题来了,既然stdout是文件描述符,此处fputc()的原型应该是fputc(char,FILE *)
可以看到,第2个参数应该是一个文件指针,但是在这里却可以使用文件描述符来代替。为什么我自己获得的文件描述符和文件指针却不能相互通用呢??
希望有达人,能帮助我去理解这个问题,谢谢了。
希望认识其他学习unix/linux,以及socket编程的朋友,我的联系方式:
QQ: 21354313
email: ivanlee1@163.com |
|