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()程式執行結果為檔案mytest2中的內容變為:dddhhhhhhhhhint 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中
程式例項:檔名為file5.c
int main()close(1); //關閉標準輸出int fd;
int i;
if((fd=open("mytest3",o_creat|o_rdwr,0644))==-1){
printf("open file error!");
exit(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已經開啟,則先將...