真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

dup和dup2函數(shù)-創(chuàng)新互聯(lián)

我們都知道,一個(gè)進(jìn)程在存在期間,會(huì)有一些文件被打開,從而會(huì)返回一些文件描述符,從shell中運(yùn)行一個(gè)進(jìn)程,默認(rèn)會(huì)有3個(gè)文件描述符存在,即0,1,2.0與進(jìn)程的標(biāo)準(zhǔn)輸入相關(guān)聯(lián),1與進(jìn)程的標(biāo)準(zhǔn)輸出相關(guān)聯(lián),2與進(jìn)程的標(biāo)準(zhǔn)輸出錯(cuò)誤相關(guān)聯(lián)。

創(chuàng)新互聯(lián)建站制作網(wǎng)站網(wǎng)頁找三站合一網(wǎng)站制作公司,專注于網(wǎng)頁設(shè)計(jì),做網(wǎng)站、成都網(wǎng)站制作,網(wǎng)站設(shè)計(jì),企業(yè)網(wǎng)站搭建,網(wǎng)站開發(fā),建網(wǎng)站業(yè)務(wù),680元做網(wǎng)站,已為成百上千家服務(wù),創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)將一如既往的為我們的客戶提供最優(yōu)質(zhì)的網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷推廣服務(wù)!

      dup和dup2函數(shù)用來復(fù)制一個(gè)文件的描述符,用于文件描述符的重定向,重定向一個(gè)進(jìn)程的0,1,2文件描述符。這兩個(gè)函數(shù)的原型如下:

      int dup(int oldfd);

      int dup2(int oldfd,int newfd);

      利用dup函數(shù),我們可以復(fù)制一個(gè)文件描述符,傳給該函數(shù)一個(gè)既有的描述符,它就會(huì)返回一個(gè)新的描述符,這個(gè)新的描述符是傳給它的舊描述符的拷貝,這意味著這兩個(gè)文件描述符共享同一個(gè)數(shù)據(jù)結(jié)構(gòu),即所有的鎖定,讀寫指針,各項(xiàng)權(quán)限和標(biāo)志位等等。但復(fù)制成功時(shí)返回最小的尚未被使用的文件描述符,這個(gè)文件描述符指向oldfd所擁有的文件表項(xiàng),例如,假如oldfd的值為1,當(dāng)前文件文件描述符的最小值為3,那么新描述符3指向描述符1所擁有的文件表項(xiàng)。出錯(cuò)返回-1,錯(cuò)誤代碼在errno中。

      dup2函數(shù)可以用參數(shù)newfd指定新文件描述符的數(shù)值,若newfd已經(jīng)被程序使用,系統(tǒng)就會(huì)將其關(guān)閉以釋放該文件描述符。若newfd與oldfd相等,dup2將返回newfd,而不關(guān)閉它。dup2調(diào)用成功返回新的文件描述符,出錯(cuò)返回-1.dup2函數(shù)可以讓用戶自己指定文件描述符,它的作用也是復(fù)制文件描述符,將newfd描述符所對(duì)應(yīng)的文件表改成oldfd所對(duì)應(yīng)的文件表項(xiàng)。之后,newfd與oldfd指向同一個(gè)文件表,這樣就將newfd重定向到oldfd。

      dup和dup2的區(qū)別就是可以用newfd參數(shù)指定新描述符的數(shù)值,如果newfd已經(jīng)打開,則先將其關(guān)閉,如果newfd等于oldfd,則dup2返回newfd而不關(guān)閉它。

下面我們來看看一段有關(guān)dup的代碼:

#include 
   #include 
   #include 
   #include 
   #include 
   #include 
   #include 
   
   #define _FILE_ "./log"
  
  int main()
  {
      umask(0);
      int fd=open(_FILE_,O_CREAT |O_WRONLY,0644);
      printf("%d\n",fd);
      if(fd<0)
      {
          perror("open");
          return 1;
      }
      close(1);
      int new_fd=dup(fd);                                                                                                                                             
      if(new_fd<0)
      {
          perror("dup");
          return 2;
      }
  
      close(fd);
      printf("new_fd:%d\n",new_fd);
      int count=0;
      while(count++<100)
      {
          printf("hello world\n");
          fflush(stdout);
      } 
      close(new_fd);
      return 0;
  }

運(yùn)行結(jié)果如下:

dup和dup2函數(shù)

      我們可以看到,當(dāng)沒有close(1)的時(shí)候,新open的文件描述符是3,當(dāng)我們close(1)后并調(diào)用dup函數(shù)后,new_fd變成了1,本來將要輸出到終端的內(nèi)容被重定向到了log文件里。

dup2函數(shù)示例:

#include 
   #include 
   #include 
   #include 
   #include 
   #include 
   #include 
   
   
  #define _FILE_ "./log"
  
  int main()
  {
      umask(0);
      int fd=open(_FILE_,O_CREAT |O_WRONLY,0644);
      if(fd<0)
      {
          perror("open");
          exit(0);
      }
  
      close(1);
      int ret=dup2(fd,1);//復(fù)制oldfd到文件描述符1(標(biāo)準(zhǔn)輸出)
      if(ret<0)
      {
          perror("dup2");                                                                                                                                             
          exit(1);
      }
      char buf[1024];
      int done=0;
      while(!done)
      {
          memset(buf,'\0',sizeof(buf));
          ssize_t _s=read(0,buf,sizeof(buf)-1);
          if(_s<=0)
          {
              perror("read");
              exit(2);
          }
          else if(_s>0)
          {
              buf[_s]='\0';                                                                                                                                           
              if(strncmp(buf,"quit",4)==0)
              {
                  done=1;
                  continue;
              }
          }
          printf("%s\n",buf);
          fflush(stdout);
      }
      return 0;
  }

運(yùn)行結(jié)果如下:

dup和dup2函數(shù)

從結(jié)果可以看到,我們從標(biāo)準(zhǔn)輸入輸入的數(shù)據(jù)全都被重定向到了log文件里面了。                                                                                                                              

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開啟,新人活動(dòng)云服務(wù)器買多久送多久。


文章標(biāo)題:dup和dup2函數(shù)-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://weahome.cn/article/dpdjoo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部