3 12 dup函式 檔案描述符複製

2021-06-18 23:36:44 字數 1256 閱讀 9686

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操作的...