//用dup()來返回檔案描述符,直到符合要求的為止,最後再把不符合要求的關閉
//當輸入的描述符是負的或者已超過max_open時,會出錯
#include //dup()
#include #include #define open_max 256
int my_dup2(int, int);
int main(int argc, char *argv)
printf("請輸入你要設定複製的描述符: ");
scanf("%d", &newfd);
//開啟乙個檔案
int fd = open(argv[1], 0);//開啟乙個檔案準備複製
if(fd == -1)
printf("原來的檔案描述符是: %d\n", fd);
return_fd = my_dup2(fd, newfd);
printf("之後的檔案描述符是: %d\n");
close(fd);
close(return_fd);
exit(0);
} int my_dup2(int fd, int newfd)
if((fdarry[count] = dup(fd)) == -1)//返回當前最小未用的檔案描述符
else//的是為了測試原檔案描述符是否可用
if(fd == newfd)//如果新設定的與原來的相等則直接接返回原來的
close(newfd);//關閉要複製的檔案描述符
//當執行下面的**時說明使用者設定的檔案描述符與一開始的並不相同
for(count = 0; count <= newfd; count++)
else
} for(count = 0; count <= newfd; count++)
}
**
dup與dup2系統呼叫
以下 摘自linux 0.11,雖然 已經過時,但是它的實現非常直觀,簡單,對於理解dup的實現有著很大的價值和幫助。通過這段 很容易理解dup背後的思想。複製檔案控制代碼 描述符 fs fcntl.c 引數fd 是欲複製的檔案控制代碼,arg 指定新檔案控制代碼的最小數值。返回新檔案控制代碼或出錯...
linux下dup2的實現
這是apue的乙個習題,要求不用fcntl來實現dup2.這是我的思路 迴圈呼叫dup複製file descriptor,直到與指定的相同。如果您有更高效的方法,請告訴小弟我,非常感謝 如下 include include include include define max 1000 functi...
Linux 系統呼叫 dup 和dup2
1 dup dup 系統呼叫會建立檔案描述符的乙個拷貝 1 新生成的檔案描述符是程序中最小的未使用的檔案描述符,0 1 2對應標準輸入 標準輸出 標準錯誤輸出 2 如果拷貝成功,那麼原始的和拷貝的檔案描述符可能會交叉使用 3 兩者都指向同乙個開啟的檔案描述符,因此共享檔案偏移量和檔案狀態標誌 語法 ...