检查程序是否正在通过管道传输

时间:2016-10-30 02:02:46

标签: c git pipe

我正在编写一个加速git push操作的程序。这是它需要做的事情:

printf("[github-username]\n[github-password]");

然后我会这样使用它:

git-autologin | git push

但我不希望有人只是键入git-autologingit-autologin > file.txt并能够看到我的用户名和密码。我知道这听起来很愚蠢,因为任何人都可以自动执行git命令,但任何不受信任的用户都不可能使用我的系统。

我的问题:如何判断标准输出是写入文件/终端还是正在通过管道传输? 修改git push管道只是一个想法,而不是我要求的唯一原因。 编辑:有没有办法确定PID或有关其传输过程的更多信息?

1 个答案:

答案 0 :(得分:2)

您可以使用(在Linux& POSIX!上)isatty(3)函数来检测 stdout 何时是终端,可能是isatty(STDOUT_FILENO)

所以你可以猜测,如果isatty(STDOUT_FILENO)为假,标准输出将被重定向或管道传输。

或者,使用fstat(2)作为fstat(STDOUT_FILENO, &stdoutstat);

但您应该在系统上正确设置ssh(使用凭据,任何SSH教程的STFW!),以避免git询问任何密码。