dup函式(檔案程式設計)

2021-10-07 14:08:09 字數 1455 閱讀 1683

dup和dup2用來複製檔案描述符。

函式原型:

#include

int dup(int oldfd);

int dup2(int oldfd,int newfd);

dup用來複製oldfd所指的檔案描述符。但複製成功時返回最小的尚未被使用的檔案描述符。若有錯誤則返回-1,錯誤**存入errno中。返回的新檔案描述符和引數oldfd指向同乙個檔案,共享所有的鎖定,讀寫指標,和各項許可權或標誌位。

dup2可以用引數newfd指定新檔案描述符的數值。若newfd已經被程式使用,系統就會將其關閉以釋放該檔案描述符;若newfd與oldfd相等,dup2將返回newfd,而不關閉他。dup2呼叫成功返回新的檔案描述符,出錯則返回-1。

標準輸入(stdin),標準輸出(stdout),標準出錯資訊(stderr)的檔案號分別為0,1,2

乙個簡單的例子:首先在當前目錄下存在乙個檔案mytest2,檔案內容為hhhhhhhhhhhh

int main()

int oldfd;

oldfd = open("mytest2",o_rdwr|o_creat,0644);

dup2(oldfd,1);   //複製oldfd到檔案描述符1(stdout標準輸出)

close(oldfd);    //關閉檔案描述符oldfd

printf("ddd");  //在標準輸出上列印出ddd,這時由於標準輸出已經被oldfd檔案描述符代替

return 0;       //列印到標準輸出上的內容就全部列印到了檔案mytest2中

程式執行結果為檔案mytest2中的內容變為:dddhhhhhhhhh

程式例項:檔名為file5.c

int main()

int fd;

int i;

if((fd=open("mytest3",o_creat|o_rdwr,0644))==-1){

printf("open file error!");     

exit(1);

close(1);  //關閉標準輸出

dup(fd);  // 複製檔案描述符fd到1上

close(fd);

printf("writ to file\n");

return 0;    

程式執行時結果:

moalong@xiyoulinux-desktop:~/along/code/c/part5$ make file5

cc     file5.c   -o file5

moalong@xiyoulinux-desktop:~/along/code/c/part5$ ./file5

moalong@xiyoulinux-desktop:~/along/code/c/part5$ cat mytest3

writ to file

重定向程式設計 dup和dup2函式

輸入重定向 關閉標準輸入裝置,開啟 或複製 某普通檔案,使其檔案描述符為0.輸出重定向 關閉標準輸出裝置,開啟 或複製 某普通檔案,使其檔案描述符為1.錯誤輸出重定向 關閉標準錯誤輸入裝置,開啟 或複製 某普通檔案,使其檔案描述符為2.1.dup函式 返回值 如成功則返回新的檔案描述符,否則出錯返回...

dup函式剖析

dup的作用是複製檔案控制代碼。為了能夠一睹dup的真身,不得不提到任務資料結構 就是我們常說的pcb結構。在linux核心中,此結構定義為struct task struct。task struct有乙個檔案結構指標陣列,陣列的元素個數就是程序能夠開啟的檔案控制代碼的數量最大值。當前程序開啟的每個...

dup函式詳解

功能 複製檔案描述符,重定向輸入輸出。函式 include intdup int oldfd int dup2 int oldfd,int newfd 返回值 成功 dup函式返回當前系統可用的最小整數值。dup2函式返回第乙個不小於newfd的整數值,分兩種情況 1.如果newfd已經開啟,則先將...