函数dup和dup2
生活随笔
收集整理的這篇文章主要介紹了
函数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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最强男神剧情介绍
- 下一篇: 试管婴儿做完还会不会痛