Copy檔案描述符

2021-09-25 06:16:38 字數 1745 閱讀 9634

複製檔案描述符可以用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 來訪問檔案。檔案描述符是非負整數。開啟現存盤案或新建檔案時,核心會返回乙個檔案描述符。讀寫檔案也需要使用檔案描述符來指定待讀寫的檔案。目錄檔案描述符概述 如何建立檔案描述符 使用的好處 缺點...