簡體   English   中英

IO關於文件描述符

[英]IO on file descriptors

我只是遇到以下行為,並想知道其背后的原因:

假設像這樣的簡化程序

...
{
  std::ifstream in(argv[1]);
  assert(in.good());
  while (std::getline(in, line)) {
   // Area 1
  }
  in.close();
}
{
  std::ifstream in(argv[1]);
  assert(in.good());
  while (std::getline(in, line)) {
   // Area 2
  }
  in.close();
}

如果這樣的程序被調用為:

./myProg xxx

,區域1和區域2將被輸入n次,其中n是在XXX行數。

但是,如果這樣調用我(使用bash):

./myProg <(head -n 100 xxx)

區域1將被輸入100次, 區域2將被輸入0次。 兩個斷言(in.good())都可以通過。 顯然,第二個參數傳遞了文件描述符(如果我打印自變量,則類似於/ dev / fd / 63),而不是實際文件,並且該東西可以打開以讀取一次-但是當打開兩次時,對於第二次通話。

我不知道背后的原因是什么。

head進程由bash執行一次,並將其輸出重定向到管道,您的進程可以通過該管道通過文件inode訪問該管道。 您的程序對該head命令一無所知,嘗試關閉並重新打開該文件不會導致該文件再次執行。

這類似於您的程序從cin讀取並以head -n 100 xxx | ./myProg執行的情況head -n 100 xxx | ./myProg head -n 100 xxx | ./myProg 在這種情況下,您將無法通過cin兩次讀取數據。 都一樣

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM