Linux 文件流和文件描述符

從stdio.h文件中,可以看到stdin,stdout,stderr是文件流,也就是FILE指針

/* Standard streams.  */
extern struct _IO_FILE *stdin;		/* Standard input stream.  */
extern struct _IO_FILE *stdout;		/* Standard output stream.  */
extern struct _IO_FILE *stderr;		/* Standard error output stream.  */
/* C89/C99 say they're macros.  Make them happy.  */
#define stdin stdin
#define stdout stdout
#define stderr stderr
#ifndef __FILE_defined
#define __FILE_defined 1

struct _IO_FILE;

/* The opaque type of streams.  This is the definition used elsewhere.  */
typedef struct _IO_FILE FILE;

#endif

 

fileno()函數

功    能:把文件流指針轉換成文件描述符
相關函數:open, fopen
表頭文件:#include <stdio.h>
定義函數:int fileno(FILE *stream)
函數說明:fileno()用來取得參數stream指定的文件流所使用的文件描述詞
返回值  :返回和stream文件流對應的文件描述符。如果失敗,返回-1。
範例:
#include <stdio.h>
main()
{
     FILE   *fp;
     int   fd;
     fp = fopen("/etc/passwd", "r");
     fd = fileno(fp);
     printf("fd = %d\n", fd);
     fclose(fp);
}

    文件描述詞是Linux編程中的一個術語。當一個文件打開後,系統會分配一部分資源來保存該文件的信息,以後對文件的操作就可以直接引用該部分資源了。文件描述詞可以認爲是該部分資源的一個索引,在打開文件時返回。在使用fcntl函數對文件的一些屬性進行設置時就需要一個文件描述詞參數。
    以前知道,當程序執行時,就已經有三個文件流打開了,它們分別是標準輸入stdin,標準輸出stdout和標準錯誤輸出stderr。和流式文件相對應的是,也有三個文件描述符被預先打開,它們分別是0,1,2,代表標準輸入、標準輸出和標準錯誤輸出。
    需要指出的是,上面的流式文件輸入、輸出和文件描述符的輸入輸出方式不能混用,否則會造成混亂。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章