1. 程式人生 > >淺談 Linux 下的檔案描述符 fd fp

淺談 Linux 下的檔案描述符 fd fp

  • 檔案描述符:
    是個很小的正整數,它是一個索引值,指向核心為每一個程序所維護的該程序開啟檔案的記錄表。

    • 當某個程式開啟檔案時,作業系統返回相應的檔案描述符,程式為了處理該檔案必須引用此描述符。所謂的檔案描述符是一個低階的正整數。最前面的三個檔案描述符(0,1,2)分別與標準輸入(stdin),標準輸出(stdout)和標準錯誤(stderr)對應。因此,函式 scanf() 使用 stdin,而函式 printf() 使用 stdout。可以用不同的檔案描述符改寫預設的設定並重定向程序的 I/O 到不同的檔案。
  • Linux下使用open函式(系統呼叫)開啟檔案會得到檔案描述符fd(int型變數),而使用C庫中的fopen函式開啟檔案則會得到檔案描述符fp(FILE*型變數),二者之間是可以相互轉換的。

    fd轉fp

int main(int argc, char *argv[])  
{  
    FILE *fp = NULL;  
    fp  = fopen("/home/super_bert/test.dat", "r");    /*得到檔案指標*/  
    if (fp == NULL)  
    {  
        perror("open file error.");  
        exit(1);  
    }  
    else  
    {  
        printf("open file successfully...\n");  
    }  

    int
fd; fd = fileno(fp); /*檔案指標轉換為檔案描述符*/ if (-1 == fd) { perror("fp to fd error."); } else { printf("transform successfully...\n") exit(1); } return 0; }

fp轉fd

int main(int argc, char *argv[])  
{  
    int  fd;  
    fd = open
("/home/super_bert/test.dat", O_CREAT|O_RDWR, 0666); /*得到檔案描述符*/ if ( -1 == fd ) { perror("open file error."); exit(1); } else { printf("open file successfully...\n"); } FILE *fp = NULL; fp = fdopen(fd, "r"); /*檔案描述符轉換為檔案指標*/ if (NULL == fp) { perror("fd to fp error."); } else { printf("transform successfully...\n"); exit(1); } return 0; }
  • FILE中的命令簡介

    功能說明:file命令是用來檢測並顯示檔案型別(determine file type)。
    語  法:file [-beLvz][-f <名稱檔案>][-m <魔法數字檔案>…][檔案或目錄…]
    參  數:
     -b  列出辨識結果時,不顯示檔名稱。
     -c  詳細顯示指令執行過程,便於排錯或分析程式執行的情形。
     -f<名稱檔案>  指定名稱檔案,其內容有一個或多個檔名稱呢感,讓file依序辨識這些檔案,格式為每列一個檔名稱。
     -L  直接顯示符號連線所指向的檔案的類別。
     -m<魔法數字檔案>  指定魔法數字檔案。
     -v  顯示版本資訊。
     -z  嘗試去解讀壓縮檔案的內容。