LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1185|回复: 1

关于文件描述符与文件指针

[复制链接]
发表于 2006-8-31 21:30:03 | 显示全部楼层 |阅读模式
首先是文件描述符和文件指针的区别?
我们知道,文件指针是指向一个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
发表于 2006-9-1 17:41:27 | 显示全部楼层
stdout不是描述符,它只是一个FILE结构地址
一般类似下面定义:
extern FILE _io[];
#define stdout &_io[1];

FILE是ANSI-C中的东西,描述符是UNIX-C中的概念
虽然在FILE中描述符,但各个OS实现是不一样的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表