dup函式用於從乙個已存在的檔案描述符複製乙個新檔案描述符。函式原型如下:
#include int dup(int filedes);
返回值:若賦值成功則返回新檔案描述符,若出錯則返回-1
引數:filedes被複製檔案描述符。
例項 x.3.12.1.c
#include #include #include #define buffsize 256
int main(void)
f_id2 = dup(f_id1); /*複製檔案描述符*/
if (f_id2 == -1)
printf("f_id1:%d\n", f_id1);
printf("f_id2:%d\n", f_id2);
/*把檔案指標移動到檔案開始處*/
offset = lseek(f_id1, 0, seek_set);
if (offset == -1)
/*通過檔案描述符f_id1寫入3位元組資料[0-2]*/
nbytes = 3;
nwrite = write(f_id1, buf, nbytes);
if (nwrite == -1)
/*通過檔案描述符f_id2寫入7位元組資料[3-9]*/
nbytes = 7;
nwrite = write(f_id2, (buf + 3), nbytes);
if (nwrite == -1)
close(f_id1);
close(f_id2);
}
編譯與執行:
[root@localhost unixc]# rm -f /tmp/myfile
[root@localhost unixc]# cc x.3.12.1.c
[root@localhost unixc]# ./a.out
f_id1:3
f_id2:4
[root@localhost unixc]# cat /tmp/myfile
0123456789[root@localhost unixc]#
分析:1、複製出來的新檔案描述符f_id2一般為當前可用檔案描述符的最小值;
2、新複製出來的檔案描述符f_id2與被複製的檔案描述符f_id1共享乙個檔案表項:**中第二次寫操作是通過檔案描述符f_id2來執行,並且沒有呼叫lseek重新定位,但第二次寫入並不覆蓋第一次寫入。
複製檔案描述符dup和dup2
檔案描述符的複製 dup和dup2是兩個非常有用的系統呼叫,都是用來複製乙個檔案的描述符,使新的檔案描述符也標識舊的檔案描述符所標識的檔案。int dup int oldfd int dup2 int oldfd,int newfd dup和dup2經常用來重定向程序的stdin,stdout和st...
檔案描述符的複製
include int dup int fd int dup2 int fd,int fd2 這兩個函式可用來複製現有的檔案描述符。成功返回檔案描述符,出錯返回 1 dup返回當前可用檔案描述符中的最小數值。dup2中,fd2指定新的檔案描述符,如果fd2已經開啟,先將其關閉 如果fd等於fd2,返...
mysql 檔案描述符 檔案描述符
toc 首先,linux的世界裡一切皆為檔案,無論是裝置還是乙個socket連線。檔案又可分為 普通檔案 目錄檔案 鏈結檔案和裝置檔案。檔案描述符 file descriptor 是核心為了高效管理已被開啟的檔案所建立的索引,其是乙個非負整數 通常是小整數 用於指代被開啟的檔案,所有執行i o操作的...