地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【Linux】io.h: No such file or directory

謎な技術だったので調べた。結論としてはisattyのようなライブラリ関数を使うかfstatでstdoutのステータスを判定すれば良さそう

#include <stdio.h>

int main(int argc, char **argv)
{
    if (isatty(fileno(stdout)))
        printf( "stdin is a terminal\n" );
    else
        printf( "stdin is a file or a pipe\n");
}

みたいに書いておけばstdoutの後続にパイプがあれば出力を抑制なり整形するみたいな処理を書くことができる。

fstatならマクロを使う。

struct stat stats;
fstat(0, &stats);
if (S_ISCHR(stats.st_mode)) {
    // Looks like a tty, so we're in interactive mode.
} else if (S_ISFIFO(stats.st_mode)) {
    // Looks like a pipe, so we're in non-interactive mode.
}