複製檔案描述符可以用linux系統提供的兩個系統呼叫 dup(), dup2(),複製後,新的描述符也標識舊描述符所標識的檔案。這樣的話,原來的檔案描述符和新的檔案描述符都指向同乙個檔案,我們操作這兩個檔案描述符的任何乙個,都能操作它所對應的檔案。就像配鑰匙一樣,新鑰匙和舊鑰匙都能開啟原來的那把鎖。(這個模擬是從網上看到的,感覺相當形象。)
#include#include#include#include#include#include#includeint main()
printf("舊 的檔案描述符 %d\n",file1);
file2 = dup(file1);
printf("新 的檔案描述符 %d\n",file2);
const char* buf1 = "我是 舊 描述符寫進來的。\n";
write(file1,buf1,strlen(buf1));
const char* buf2 = "我是 新 描述符寫進來的。\n";
write(file2,buf2,strlen(buf2));
close(file1);
close(file2);
return 0;
}
[lingyun@manjaro study]$ gcc study.c
[lingyun@manjaro study]$ ./a.out
舊 的檔案描述符 3
新 的檔案描述符 12
[lingyun@manjaro study]$ cat main.new
我是 舊 描述符寫進來的。
我是 新 描述符寫進來的。
dup2() 和 dup() 的功能差不多,但是 dup2() 可以指定任意乙個合法的數字作為新的檔案描述符。
#include#include#include#include#include#include#includeint main()
printf("舊 的檔案描述符 %d\n",file1);
/*直接指定 1 為新的檔案描述符,此時標準輸出描述符就指向了檔案 main.new,
* 所以當執行 printf() 函式時,其內容會被列印到檔案 main.new 中。
* 相當於執行了
* close(1);
* file2 = dup(file1);
* 這兩條語句 */
file2 = dup2(file1,1);
printf("新 的檔案描述符 %d\n",file2);
const char* buf1 = "我是 舊 描述符寫進來的。\n";
write(file1,buf1,strlen(buf1));
const char* buf2 = "我是 新 描述符寫進來的。\n";
write(file2,buf2,strlen(buf2));
close(file1);
close(file2);
return 0;
}
[lingyun@manjaro study]$ gcc study.c
[lingyun@manjaro study]$ ./a.out
舊 的檔案描述符 3
[lingyun@manjaro study]$ cat main.new
新 的檔案描述符 1
我是 舊 描述符寫進來的。
我是 新 描述符寫進來的。
mysql 檔案描述符 檔案描述符
toc 首先,linux的世界裡一切皆為檔案,無論是裝置還是乙個socket連線。檔案又可分為 普通檔案 目錄檔案 鏈結檔案和裝置檔案。檔案描述符 file descriptor 是核心為了高效管理已被開啟的檔案所建立的索引,其是乙個非負整數 通常是小整數 用於指代被開啟的檔案,所有執行i o操作的...
檔案描述符
檔案描述符 是個很小的正整數,它是乙個索引值,指向核心為每乙個程序所維護的該程序開啟檔案的記錄表。檔案描述符的優點 相容posix標準,許多 linux 和unix 系統呼叫都依賴於它。檔案描述符的缺點 不能移植到unix以外的系統上去,也不直觀。基於檔案描述符的輸入輸出函式 open 開啟乙個檔案...
檔案描述符
作業系統程序表中存放各個檔案進行檔案描述 核心 kernel 利用檔案描述符 file descriptor 來訪問檔案。檔案描述符是非負整數。開啟現存盤案或新建檔案時,核心會返回乙個檔案描述符。讀寫檔案也需要使用檔案描述符來指定待讀寫的檔案。目錄檔案描述符概述 如何建立檔案描述符 使用的好處 缺點...