我写了一个打印消息的程序,等待用户输入并再次打印消息。下面的简单示例说明了这一点。该程序以'prog |启动tr'a-z''A-Z'。只有最后一个印刷品应由'tr'a-z''A-Z'处理。
int main ()
{
char name[99];
printf ("Your name: ");
scanf ("%98s", name);
printf ("Your name is: %s\n", name);
return 0;
}
我用pipe,dup,dup2尝试了很多,但到目前为止还没有任何工作。有谁知道如何解决我的问题?
答案 0 :(得分:1)
如果您想使用此命令启动程序,那么执行所需操作的唯一方法是在stderr中打印消息:
fprintf (stderr, "Your name: \n");
答案 1 :(得分:0)
经过一些研究,我发现how to check if stdout is directed to a terminal和how to write to terminal即使没有处理它。
所以你可以按照以下步骤进行:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
int print_to_terminal(const char *message)
{
FILE *termout;
if (isatty(STDOUT_FILENO))
{
termout = stdout;
}
else
{
termout = fopen("/dev/tty", "w");
if (termout == NULL)
{
perror("open");
return EOF;
}
}
int result = fprintf(termout, "%s\n", message);
if (termout != stdout)
{
fclose(termout);
}
return result;
}
int main()
{
printf("Start of program.\n");
print_to_terminal("Don't worry, be happy.");
printf("End of program.\n");
return 0;
}
即使stdout和stderr都指向文件,也应该在当前终端中打印消息。
答案 2 :(得分:0)
使用tail:http://linux.die.net/man/1/tail
prog | tail -n 1 | tr 'a-z' 'A-Z'