C++ 如何进行Ctrl+;Z与I/O重定向?

C++ 如何进行Ctrl+;Z与I/O重定向?,c++,file,debugging,io-redirection,C++,File,Debugging,Io Redirection,我写了一个复杂的程序,它的工作原理就像一个小shell,当用户按下ctrl+c或ctrl+z时,它的大部分工作都完成了。我如何通过文件输入重定向来完成这样的工作呢 我原以为写ctrl+z行得通,但我错了。测试输入文件的一个示例: chprompt hello sleep 2 sleep 3 sleep 5& 附带问题: 我注意到,在真实的shell中,当没有命令运行并且我按下Ctrl+z时,什么也不会发生,但当我按下Ctrl+c时,我看到一些文本打印出来,并看到一行新行,为什么会有这

我写了一个复杂的程序,它的工作原理就像一个小shell,当用户按下ctrl+c或ctrl+z时,它的大部分工作都完成了。我如何通过文件输入重定向来完成这样的工作呢

我原以为写ctrl+z行得通,但我错了。测试输入文件的一个示例:

chprompt hello
sleep 2
sleep 3
sleep 5&

附带问题:

我注意到,在真实的shell中,当没有命令运行并且我按下Ctrl+z时,什么也不会发生,但当我按下Ctrl+c时,我看到一些文本打印出来,并看到一行新行,为什么会有这种差异?

终端控制信号(Ctrl-c和Ctrl-z)与I/O重定向无关。重定向I/O只会影响stdin从何处读取或stdout写入何处——它不会影响任何进程的控制终端

当用户点击终端上的CtrlC或CtrlZ时,它向终端的控制(前台)进程组发送信号(SIGINT或SIGTSTP)。它不会向读取终端的任何人发送任何输入,但如果前台组中的一个进程正在读取,它将获得信号(这可能会中断读取)。如果程序读取
'\x03'
'\x1A'
(ascii/unicode字符有时与ctrl-C或ctrl-Z关联),它只读取该字符——不会发送中断或信号

如果您试图“模拟”ctrl-C或ctrl-Z来测试pupose,您(只)需要向相关进程发送SIGINT或SIGTSTP。您无法使用文件的任何内容来引发它

我注意到,在真实的shell中,当没有命令运行时,我按Ctrl+z时,什么都不会发生,但当我按Ctrl+c时,我看到一些文本打印出来,并看到一行新行,为什么会有这种差异


shell对SIGINT和SIGTSTP有不同的信号处理程序——SIGTSTP的处理程序完全忽略了信号,而SIGINT的一个会打印出一个发生的指示和另一个提示。

我的问题清楚了吗?通过“打印”你是指“键入”吗?如果它是一个文件,那么不要只检查EOF/流结束?很抱歉,你没有回答我的第一个问题,我如何通过输入重定向和测试ctrl+z来测试我的项目?