父函数可以告诉孩子是否已写入stdin?

时间:2015-11-17 16:25:31

标签: c fork parent stdin

例如,让我们说父函数有:

scanf("%s", str);
if (strcmp(str,"test")==0)
    printf("Success!\n);

这里是子函数:

signal(SIGUSR1, speak);
sleep(5);
kill(0, SIGUSR1)

,睡眠功能是:

void speak()
{
    puts("test");
}

为什么父母的功能永远不会成功?是因为puts函数没有从键盘写入?我有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

  

为什么父母的功能永远不会成功?是因为put函数不能从键盘写入吗?我有办法解决这个问题吗?

我认为您允许子进程从父进程继承其标准流,以便父进程和子进程共享它们。您似乎有一个奇怪的想法,即写入stdout的数据应反馈给stdin。虽然可以通过创建管道并重新分配标准流来安排,但这样做并不正常,更不用说自动了。

如果要通过流I / O在两个进程之间执行IPC,那么在它们之间创建管道是少数几种方法之一,也许是最简单的方法。当进程与父/子相关时尤其如此。

答案 1 :(得分:0)

我们可以在不使用pipe的情况下进行重定向。据我所知,你的目标是通过子进程打印到stdout并通过父进程从stdin读取。

这是一个解决方案: freopen("myfile.txt","r",stdin); ------>在创建子项后在父进程中执行此操作。

freopen("myfile.txt","w",stdout); ------>在创建子项后在子进程中执行此操作。