淺談 Linux 下的檔案描述符 fd fp
阿新 • • 發佈:2019-02-19
檔案描述符:
是個很小的正整數,它是一個索引值,指向核心為每一個程序所維護的該程序開啟檔案的記錄表。- 當某個程式開啟檔案時,作業系統返回相應的檔案描述符,程式為了處理該檔案必須引用此描述符。所謂的檔案描述符是一個低階的正整數。最前面的三個檔案描述符(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 嘗試去解讀壓縮檔案的內容。