日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

函数dup和dup2

發布時間:2023/11/30 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 函数dup和dup2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

函數原型:

#include<unistd.h> int dup(int oldfd);返回值:若成功,返回新的文件描述符;若出錯,返回-1

參數:

  • oldfd:要復制的文件描述符
  • dup調用成功:有兩個文件描述符指向同一個文件
  • 返回值:取最小的且沒被占用的文件描述符

函數原型:

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

分析:

  • 假設newfd已經指向一個文件,首先斷開close與那個文件的連接,newfd指向oldfd指向的文件。(文件描述符重定向)
  • 假設調用函數dup2前oldfd與newfd指向同一個文件,調用函數什么也不做。
  • 假設newfd沒被占用,newfd指向oldfd指向的文件。

測試代碼:

#include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <stdlib.h> #include <string.h>int main() {int fd = open("temp", O_RDWR | O_CREAT, 0664);if(fd == -1) {perror("open");exit(1);}int fd2 = dup(fd);char *p = "編程讓世界更美好編程讓世界更美好編程讓世界更美好";write(fd2, p, strlen(p));close(fd2);char buf[1024];lseek(fd, 0, SEEK_SET);read(fd, buf, sizeof(buf));printf(" buf = %s\n", buf);close(fd);return 0; }

輸出結果:

測試代碼:

#include <unistd.h> #include <fcntl.h> #include <stdlib.h> #include <string.h> #include <stdio.h>int main() {int fd = open("temp", O_RDWR | O_CREAT | O_APPEND, 0664);if(fd == -1) {perror("open");exit(1);}int fd2 = open("temp1", O_RDWR | O_CREAT | O_APPEND, 0664);if(fd2 == -1) {perror("open");exit(1);}dup2(fd, fd2);char *p = "apue還有好多要看,心累啊aa";write(fd2, p, strlen(p));close(fd2);char buf[1024];lseek(fd, 0, SEEK_SET);read(fd, buf, sizeof(buf));printf(" buf = %s\n", buf);close(fd);return 0; }

輸出結果:

?

總結

以上是生活随笔為你收集整理的函数dup和dup2的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。