dup2 功能實現

2021-07-12 03:54:06 字數 990 閱讀 8283

//用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 兩者都指向同乙個開啟的檔案描述符,因此共享檔案偏移量和檔案狀態標誌 語法 ...