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

廣告


  

廣告



廣告
© . All rights reserved.