日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

重定向dup2的本质

發布時間:2025/3/21 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 重定向dup2的本质 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在前一面一篇《UNIX I/O---再談文件描述符 》的基礎上,學習一下dup2函數。先看下面的代碼示例: #include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h> int main(int argc,char* argv[])
{
?int fd; fd = open("my.file",O_WRONLY|O_CREAT|O_APPEND,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
?if(fd == -1)
?{
??perror("\nERROR: fail to creat my.file.");
??return -1;?
?}
?
?if(dup2(fd,STDOUT_FILENO) == -1)
?{
??perror("\nERROR: fail to redirect std output.");
??return -1;
?}
?if(close(fd)==-1)
?{
??perror("\nERROR: fail to colse my.file.");
??return -1;
?}
?if(write(STDOUT_FILENO,"HELLO",5)==-1)
?{
??perror("\nERROR: fail to write to file.");
??return -1;
?}?
?return 0;
}
上面一段程序是一個比較簡單的創建文件、并將標準輸出重定向到文件的例子。 (1)open函數打開文件,文件不存在時,根據給定的參數進行文件創建,創建以后再打開。這里open()是操作系統在系統文件表內創建了一個條目,并設置描述符表中的條目[3]。 圖1 (2)dup2函數有2個參數fd1和fd2,如果文件描述符表的fd2條目是打開的,dup2將其關閉,并將條目fd1的指針拷貝到條目fd2中去。dup2執行失敗返回-1,并設置ERR NO,執行成功返回被復制的文件描述符。在這里,dup2執行完以后,標準輸出就被寫入到my.file 里了。 圖3 (3)調用函數close()刪除文件my.file額外的文件描述符表條目。執行后的示意圖如圖.3所示: 此后,想標準輸出打印HELLO,并不會看到HELLO的打印信息,而cat my.file顯示 my.file的內容,可以看到HELLO??梢姌藴瘦敵鲆呀洷恢囟ㄏ虻絤y.file內部了。 執行結果: gaolu@gaolu-desktop:~$ gcc -o dup2.o systemcall2.c
gaolu@gaolu-desktop:~$ ./dup2.o
gaolu@gaolu-desktop:~$ cat my.file
HELLOgaolu@gaolu-desktop:~$

轉載于:https://blog.51cto.com/keren/170892

總結

以上是生活随笔為你收集整理的重定向dup2的本质的全部內容,希望文章能夠幫你解決所遇到的問題。

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