91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

高級I/O-----dup/dup2

發布時間:2020-07-24 20:18:09 來源:網絡 閱讀:501 作者:wpfbcr 欄目:網絡安全

dup/dup2

dup/dup2是兩個用于指定文件操作符的方法,作用很相似,它是得兩個文件描述符指向同一個file結構體,使file的引用計數為2,所以在使用的時候我們需要手動關閉另外一個不需要的。

dup:

dup的作用是將文件描述符指向一個最小的文件描述符。

       #include <unistd.h>

       int dup(int oldfd);
       int dup2(int oldfd, int newfd);


因為比較簡單,就從代碼來看吧

  1 #include<stdio.h>
  2 #include<sys/types.h>
  3 #include<sys/socket.h>
  4 #include<string.h>
  5 #include<fcntl.h>
  6 #include<unistd.h>
  7 #define _PATH_ "./test.log"
  8 
  9 
 10 int main()
 11 {
 12     umask(0);
 13     int fd=open(_PATH_,O_CREAT|O_WRONLY,0644);//打開一個新的文件
 14     if(fd<0)
 15     {
 16         perror("open");
 17     }
 18     close(1);//關掉需要用dup指向的文件描述符,注意(dup會使fd指向一個未使用的最           //小的文件描述符)
 19     int new_fd=dup(fd);//現在1號文件描述符指向剛才open的文件
 20     close(fd);   //關閉之前open的文件描述符,如果不關閉,則從fd中也能網文件                               //里寫。
 21     char buf[1024];
 22     while(1)
 23     {
 24         memset(buf,'\0',sizeof(buf));
 25         ssize_t size=read(0,buf,sizeof(buf)-1);
 26         if(size>0)
 27         {
 28             buf[size]='\0';
 29         }
 30         if(strncmp(buf,"quit",4)==0)
 31         {   
 32             break;
 31         {
 32             break;
 33         }
 34         printf("%s",buf);//printf會輸出到1號文件描述符中
 35         fflush(stdout);
 36     }
 37     close(1);
 38     return 0;
 39 }

效果圖

高級I/O-----dup/dup2高級I/O-----dup/dup2


dup2:

 1 #include<stdio.h>
 2 #include<sys/types.h>
 3 #include<sys/socket.h>
 4 #include<string.h>
 5 #include<fcntl.h>
 6 #include<unistd.h>
 7 #define _PATH_ "./test.log"
 8 
 9 int main()
 10 {
 11     umask(0);
 12     int fd =open(_PATH_,O_CREAT|O_WRONLY,0644);
 13     if(fd<0)
 14     {
 15         perror("open");
 16     }
 17     close(1); //使用dup2所使用的重定向到的文件描述符必須先關閉
 18     int newfd=dup2(fd,1);
 19     close(fd);//關閉fd現在只有1號文件描述符指向所open的文件
 20     char buf[1024];
 21     printf("%d\n",newfd);
 22     while(1)
 23     {
 24         memset(buf,'\0',sizeof(buf));
 25         fgets(buf,sizeof(buf)-1,stdin);
 26         if(strncmp(buf,"quit",4)==0)
 27         {
 28             break;
 29         }
 30         printf("%s",buf);
 31         fflush(stdout);
 32     }
 33     return 0;
 34 }

結果和dup一樣



總結:

當需要往標準輸出上打的調試信息,可以使用重定向的方式讓它輸出到相應的文件中。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

太仆寺旗| 错那县| 余姚市| 桐柏县| 资中县| 高密市| 马尔康县| 陇南市| 淮阳县| 沂水县| 格尔木市| 日照市| 宁强县| 佳木斯市| 吴旗县| 平阴县| 长宁县| 迁安市| 宜阳县| 财经| 邯郸县| 嵊泗县| 商水县| 云安县| 庆城县| 仁寿县| 贡觉县| 南漳县| 望江县| 清河县| 同德县| 榆林市| 遂宁市| 青浦区| 库尔勒市| 北海市| 宁国市| 宝坻区| 平乐县| 哈尔滨市| 白银市|