gpt4 book ai didi

c - 我想用管道和信号制作一个 REPL 风格的程序,但是我的程序锁定了

转载 作者:行者123 更新时间:2023-11-30 18:03:59 25 4
gpt4 key购买 nike

程序应该 fork ,然后父进程应该读取用户输入,并将其发送给子进程; child 应该处理它,然后将结果发送给 parent , parent 打印它(需要以这种方式工作)。

我已经完成了其中的一部分,但是程序在第一次从 fifo 读取后锁定。

我怀疑问题出在第 122-199 行之间。使管道非阻塞会使程序在 185 处跳转到 scanf 并无限循环。在写入之前和读取之后关闭并重新打开管道会产生相同的效果。

这是来源:link .

<小时/>

稍后编辑(澄清):

当它读取第二个命令时,父级在 printf 之前阻塞在 184 处(第一次似乎工作得很好)。

我还没有实现“ child 将东西发送回 parent ”部分。目前我只想让子进程输出通过管道从父进程接收到的数据,然后将控制权交还给父进程以读取另一个命令。

当父进程读取输入并通过管道发送输入时,子进程处于暂停状态(pause()),然后它唤醒子进程并进入暂停状态。子进程从管道中读取数据并输出,然后唤醒父进程并进入休眠状态。

最佳答案

您是否使用了一些多路复用系统调用,例如selectpoll,它们能够测试一组文件描述符是否已准备好(用于输入,或用于输出)?

详细了解poll或关于select和 friend 们。

关于c - 我想用管道和信号制作一个 REPL 风格的程序,但是我的程序锁定了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7874518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com