dup() - Unix、Linux 系統呼叫 - 技術教學
Tutorials Point


  Unix 初學者指南
  Unix Shell 程式設計
  高階 Unix
  Unix 有用參考
  Unix 有用資源
  精選閱讀

版權所有 © 2014 tutorialspoint



  首頁     參考     討論論壇     關於 TP  

dup() - Unix、Linux 系統呼叫


previous next AddThis Social Bookmark Button

廣告

名稱

dup、dup2 - 複製檔案描述符

語法

#include <unistd.h> int dup(int oldfd); int dup2(int oldfd, int newfd);

描述

dup() 和 dup2() 建立檔案描述符 oldfd 的副本。

dup() 或 dup2() 成功返回後,可以互換使用舊檔案描述符和新檔案描述符。它們引用相同的檔案開啟描述符(參見 open(2)),因此共享檔案偏移量和檔案狀態標誌;例如,如果使用 lseek(2) 在其中一個描述符上修改檔案偏移量,則另一個描述符的偏移量也會發生更改。

這兩個描述符不共享檔案描述符標誌(close-on-exec 標誌)。複製描述符的 close-on-exec 標誌(FD_CLOEXEC;參見 fcntl(2))已關閉。

dup() 使用最低編號的未使用描述符作為新描述符。

dup2() 使 newfd 成為 oldfd 的副本,並在必要時先關閉 newfd

返回值

dup() 和 dup2() 返回新描述符,如果發生錯誤則返回 -1(在這種情況下,errno 會相應設定)。

錯誤

標籤描述
EBADF oldfd 不是開啟的檔案描述符,或者 newfd 超出了檔案描述符的允許範圍。
EBUSY (僅限 Linux)這可能是 dup2() 在與 open() 和 dup() 的競爭條件下返回的。
EINTR dup2() 呼叫被訊號中斷。
EMFILE 程序已開啟最大數量的檔案描述符,並嘗試開啟一個新的檔案描述符。

警告

newfd 超出範圍時,dup2() 返回的錯誤與 fcntl(..., F_DUPFD, ...) 返回的錯誤不同。在某些系統上,dup2() 有時也會像 F_DUPFD 一樣返回 EINVAL

如果 newfd 已開啟,則在 close() 時可能報告的任何錯誤都將丟失。細心的程式設計師不會在不先關閉 newfd 的情況下使用 dup2()。

符合標準

SVr4、4.3BSD、POSIX.1-2001。

參見



previous next Printer Friendly

廣告


  

廣告



廣告