当前位置:  技术问答>linux和unix

file descriptor 与 FILE *的区别?

    来源: 互联网  发布时间:2016-05-23

    本文导语:  请问file descriptor 与 FILE *的区别是什么,小弟我搞不清楚! | file descriptor就是文件描述符,一般是int型的数值,用来代表一个个打开的文件。 比如常说的标准输入,标准输出和标准出错可...

请问file descriptor 与 FILE *的区别是什么,小弟我搞不清楚!

|
file descriptor就是文件描述符,一般是int型的数值,用来代表一个个打开的文件。
比如常说的标准输入,标准输出和标准出错可以分别用0,1,2来表示。文件描述符的最大值,也就是可以打开的文件数-1,各个系统一般都有限制,不尽相同。

而 FILE *是C语言中用来操作文件的一个指针,指向一个FILE结构。实际上这个FILE结构中包含了文件描述符,可以参考stdio.h中的FILE结构的定义,比如dev-cpp中带的stdio.h里面是这样定义的:

typedef struct _iobuf
{
char* _ptr;
int _cnt;
char* _base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char* _tmpfname;
} FILE;


其中_file就表示文件描述符。

你可以写1小段程序打开一个文件来看,那么针对第一个打开的文件,其FILE指针中_file就是3(因为前三个0-2已经被标准输入等占用),打开一个文件,_file就是4。

或者你可以先用FILE指针形式打开一个文件(即用fopen),然后用write来写文件来进行验证:

#include 
#include 
#include 
#include 
#include 

main()
{
char line[256]="I'm stupidn";
FILE *myfp=NULL;
if ((myfp = fopen("d:\testfile", "a")) == NULL)
{
     perror("Failed open");
     exit(1);
}

write(myfp->_file, line, strlen(line));  /*此举用文件描述符来操作打开的文件*/
fclose(myfp);
}


|
file descriptor是一个整数,用于open、read、write等函数。是用于linux/unix的
FILE *是一个指针,用于fopen、fprintf之类的函数。C标准

除了都是操作文件,好像没什么共同点了。

|
http://blog.csdn.net/freedom0203/archive/2008/04/16/2295961.aspx
http://topic.csdn.net/t/20061019/21/5095317.html
前者属于低级IO,后者是高级IO。   
  前者无缓冲,后者有缓冲。   
  前者与   read,   write   等配合使用,   后者与   fread,   fwrite等配合使用。   
  后者是在前者的基础上扩充而来的,在大多数情况下,用后者。

|
http://topic.csdn.net/t/20020401/11/613777.html
fclose()有缓冲,close()没缓冲!   
  fclose()高级I/O系统,close()低级!   
  fclose()好移植,close()不好!   
  fclose()有文件指针的,可以用文件指针来访问文件的,close()只能用一个整数来代表文件!! 

|
file descriptor只是一个整数,每个进程都有一个文件描述符表,相当于一个内核文件结构的索引而已.
而FILE *,这是一个文件指针,这是stdio定义的,对应标准IO库的一个文件结构,比如缓冲控制结构,最终这个FILE *会对应一个file descriptor.基本上对FILE *的操作底层都应对了一个file descriptor的操作.

|
一个是系统调用,一个是C的标准库。

|

up

    
 
 

您可能感兴趣的文章:

  • 初学者求教:什么是file descriptor? 象这类信息应该从那方面的书获取??
  • ERROR: File descriptor soft limit is 1024, but must be at lease 4096
  • recv()调用,bad file descriptor
  • linux下c文件描述符问题(:Bad file descriptor)
  • linux 文件能正确打开,但是显示bad file descriptor,写不了
  • open 会产生超大的 file descriptor
  • java命名空间java.io类file的类成员方法: file定义及介绍
  • 如何将两个文本文件,file1,file2内容合起来变成一个文件file3,有响应的命令吗?还是只有自己写函数实现?
  • java命名空间java.awt类jobattributes.destinationtype的类成员方法: file定义及介绍
  • 如何在File file=new File(String fileName)中的文件名用类所在的目录下的相对文件名?
  • java命名空间java.awt类event的类成员方法: save_file定义及介绍
  • . ./.bash_file 与 ./.bash_file的区别?
  • java命名空间java.awt类event的类成员方法: load_file定义及介绍
  • exist=$(ls $dir/$file | grep -v 'No such file' )
  • java命名空间javax.accessibility类accessiblerole的类成员方法: file_chooser定义及介绍
  • 请问如何关闭打开的文件,谢谢!File myfile = new File("f:\test.txt")
  • java命名空间javax.swing.plaf.synth类region的类成员方法: file_chooser定义及介绍
  • php中is_file与file_exists的区别
  • java命名空间java.io类file的类成员方法: getabsolutefile定义及介绍
  • inode,file,file_operations类型问题
  • java命名空间javax.swing类jfilechooser的类成员方法: file_view_changed_property定义及介绍
  • IE中的File域无法清空使用jQuery重设File域
  • java命名空间javax.swing类jfilechooser的类成员方法: selected_file_changed_property定义及介绍
  • PCI驱动程序的是不是可以不要file_operations;file;inode?
  • java命名空间javax.swing类jfilechooser的类成员方法: file_filter_changed_property定义及介绍
  • 初学者小问:read(file,buf,size)函数在读取文件时,file会不会自动增加?
  • java命名空间javax.swing类jfilechooser的类成员方法: file_hiding_changed_property定义及介绍
  • generic_file_aio_write_nolock和generic_file_aio_write什么区别啊?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.swing类jfilechooser的类成员方法: files_only定义及介绍
  • 利用linux命令cat, uniq, sort找出file1中存在,file2中不存在的文本行
  • java命名空间javax.swing类jfilechooser的类成员方法: files_and_directories定义及介绍
  • Oracle中临时文件File#和Db_files关系
  • java命名空间javax.swing类jfilechooser的类成员方法: selected_files_changed_property定义及介绍
  • 为什么这样会找不到当前目录下的文件File myfile = new File("test.txt"); 谢谢
  • java命名空间java.io类file的类成员方法: getparentfile定义及介绍
  • 有一个疑问,在jsp的页中有一个选择文件的<input type="file" name="upload_file_name">,当我选择了本地的一个文件的时候,按下提交,提
  • java命名空间javax.print.attribute.standard类referenceurischemessupported的类成员方法: file定义及介绍
  • 求救:修改fstab后不能启动了!可以使用single模式,但是显示file system是read-only!而且vi时显示unable to open swap file
  • java命名空间java.io类file的类成员方法: touri定义及介绍
  • php iis7站长之家
  • java命名空间javax.jws注释类型handlerchain的类成员方法: file定义及介绍
  • file类中有这种方法吗?
  • java命名空间java.io类file的类成员方法: tostring定义及介绍
  • GtkFileChooserButton的file-set信号
  • java命名空间javax.swing类jfilechooser的类成员方法: accept_all_file_filter_used_changed_property定义及介绍
  • jQuery File Upload
  • java命名空间java.io类file的类成员方法: mkdir定义及介绍
  • g++ -o file *.cpp
  • java命名空间java.io类file的类成员方法: pathseparatorchar定义及介绍
  • file


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3