Linux下開發-dup和dup2
dup和dup2都可用來複制一個現存的檔案描述符,使兩個檔案描述符指向同一個file結構體。如果兩個檔案描述符指向同一個file結構體,File Status Flag和讀寫位置只儲存一份在file結構體中,並且file結構體的引用計數是2。
如果兩次open同一檔案得到兩個檔案描述符,則每個描述符對應一個不同的file結構體,可以有不同的FileStatus Flag和讀寫位置。
#include <unistd.h>
int dup(int oldfd);
int dup2(int oldfd, int newfd);
如果呼叫成功,這兩個函式都返回新分配或指定的檔案描述符,如果出錯則返回-1。
dup返回的新檔案描述符,是該程式未使用的最小檔案描述符,這一點和open類似。
dup2可以用newfd引數指定新描述符的數值。如果newfd當前已經開啟,則先將其關閉再做dup2操作,如果oldfd等於newfd,則dup2直接返回newfd而不用先關閉newfd再複製。
int dup(int oldfd);
dup()用來複制引數oldfd所指的檔案描述詞,並將它返回。此新的檔案描述詞和引數oldfd指的是同一個檔案,共享所有的鎖定、讀寫位置和各項許可權或旗標。例如,當利用lseek()對某個檔案描述詞作用時,另一個檔案描述詞的讀寫位置也會隨著改變。不過,檔案描述詞之間並不共享close-on-exec旗標(http://www.tuicool.com/articles/FvIjMv)。
當複製成功時,則返回最小及尚未使用的檔案描述詞。若有錯誤則返回-1,errno會存放錯誤程式碼。
int dup2(int oldfd, int newfd);
dup2()用來複製引數oldfd所指的檔案描述詞,並將它拷貝至引數newfd後一塊返回。若引數newfd為一個已開啟的檔案描述詞,則newfd所指的檔案會先被關閉。dup2()所複製的檔案描述詞,與原來的檔案描述詞共享各種檔案狀態。
當複製成功時,則返回最小及尚未使用的檔案描述詞。若有錯誤則返回-1,errno會存放錯誤程式碼。
相關文章
- 物聯網學習教程Linux系統程式設計之檔案描述符的複製:dup()和dup2()Linux程式設計
- linux系統程式設計之檔案與IO(八):檔案描述符相關操作-dup,dup2,fcntlLinux程式設計
- 使用LINUX dup2 複製檔案描述符到標準輸出STDOUT_FILENOLinux
- Linux下開發-wait和waitpidLinuxAI
- Linux下開發-fcntl和ioctl的區別Linux
- Linux下開發-alarmLinux
- Linux下開發-reallocLinux
- Linux下開發CLinux
- dup()系統呼叫
- Linux檔案IO open、dup、fork核心原理圖解Linux圖解
- Linux下開發-IO複用Linux
- Linux命令和開發工具Linux
- Linux下C開發環境的構成和安裝(轉)Linux開發環境
- Linux下Web伺服器開發LinuxWeb伺服器
- Linux下開發-守護程式(daemon)Linux
- Oracle在Linux下的C開發OracleLinux
- Linux下的軟體開發(轉)Linux
- linux下搭建wails開發環境。LinuxAI開發環境
- Linux下應用程式開發:QT開發簡介(轉)LinuxQT
- linux下使用vscode和makefile搭建C++開發環境LinuxVSCodeC++開發環境
- 如何快速安裝和配置Linux下 Anaconda 以提高開發效率Linux
- fcntl函式實現dup函式
- Linux下開發-許可權詳解Linux
- Oracle在Linux下的C開發(轉)OracleLinux
- linux下JNI開發步驟詳解Linux
- linux下CUDA開發環境構建Linux開發環境
- Linux下C開發工具介紹(轉)Linux
- Linux下關閉和開啟防火牆Linux防火牆
- TCP與DUP知識點整理TCP
- Linux下搭建Go語言開發環境LinuxGo開發環境
- Linux下搭建FFmpeg開發除錯環境Linux除錯
- Linux下搭建gtk+2.0開發環境Linux開發環境
- linux(統信)下搭建electron開發環境Linux開發環境
- 敏捷開發下平衡質量和進度敏捷
- 軟體開發和敏捷-對症下藥敏捷
- vscode 配合wsl做linux下的開發VSCodeLinux
- Linux下開發-揭祕檔案連結數Linux
- Windows 下使用 Vagrant 構建 Linux 開發環境WindowsLinux開發環境