ページ 11

stdin はどこから読み込む?

Posted: 2022年6月15日(水) 23:54
by cuser
Windows, C 言語についてです

次のような文を含むソースプログラムから生成した実行プログラムを
下のイメージのように実行したとき
stdin がパイプラインかリダイレクトのどちらから読み込んだかわかる方法はありますか
(わかったところで実用性はないかもしれませんが疑問に思ったので)

コード:

ch = fgetc(stdin);
実行したときのイメージ
  1. C:\> echo aaa | prog1.exe
  2. C:\> prog1.exe < datafile1

Re: stdin はどこから読み込む?

Posted: 2022年6月16日(木) 00:33
by box
プログラム側では知るすべはありません。
パイプであろうがリダイレクトであろうが
同じ標準入力として扱うのみです。

Re: stdin はどこから読み込む?

Posted: 2022年6月17日(金) 00:08
by ripple
box さんが書きました:
1年前
プログラム側では知るすべはありません。
そんなことはないです。
POSIX関数ならfstat()でわかるし、Windowsシステムコール使うならGetFileType()でわかります。
https://stackoverflow.com/questions/131 ... al-or-pipe

Re: stdin はどこから読み込む?

Posted: 2022年6月17日(金) 00:28
by box
そうですか。それは知りませんでした。
区別できて何がうれしいんだろうとは思いますけどね。

Re: stdin はどこから読み込む?

Posted: 2022年6月18日(土) 18:22
by cuser
ripple さんが書きました:
1年前
POSIX関数ならfstat()でわかるし、Windowsシステムコール使うならGetFileType()でわかります。
https://stackoverflow.com/questions/131 ... al-or-pipe
正にリンク先のようなことが知りたかったんです
ありがとうございます
英語でも検索しないといけないんですね

それにしても、何よりも「海路の日和」があってよかったです

解決です