Поскольку вы используете файловые указатели, для этого вам понадобятся isatty()
и fileno()
:
#include <unistd.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
FILE* fp = stdin;
if(isatty(fileno(fp)))
{
fprintf(stderr, "A nice msg.\n");
exit(1);
}
/* carry on... */
return 0;
}
На самом деле, это долгий путь. Короткий путь - не использовать файловые указатели:
#include <unistd.h>
int main(int argc, char* argv[])
{
if(isatty(STDIN_FILENO))
{
fprintf(stderr, "A nice msg.\n");
exit(1);
}
/* carry on... */
return 0;
}
Несколько стандартных программ Unix делают эту проверку, чтобы изменить свое поведение. Например, если вы настроили ls
, чтобы дать вам красивые цвета, он отключит цвета, если вы передадите его стандартный вывод в другую программу.