gpt4 book ai didi

c++ - 为什么cout会阻止后续代码在这里运行呢?

转载 作者:行者123 更新时间:2023-11-30 00:56:55 26 4
gpt4 key购买 nike

我正在开发一个基本的 shell,但在下面的循环中,程序没有运行超过标记的行(而是立即循环)。当我将其注释掉时,整个 block 在再次循环之前完成。这是怎么回事?

#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;

int main(int argc, char *argv[]) {
string input;
const char *EOF="exit";
string prompt=getenv("USER");
prompt.append("@ash>");

while(true) {
int parent=fork();
if ( !parent ) {
cout << prompt; //The program never gets past this point
getline(cin,input);
if (!input.compare(EOF))
exit(0);
cout << input << '\n';
execlp("ls", "-l", NULL);
return 0;
}
else
wait();
}
}

最佳答案

添加这些#include:

#include <sys/types.h>
#include <sys/wait.h>

然后调用wait(2)正确:

int status;
wait(&status);

您的代码 wait() 不会调用 wait(2) 系统调用。相反,它声明了一个 union wait 类型的临时对象。如果你#include stdlib.h 而不是sys/wait.h,那么你只会得到类型声明,而不是函数声明。

顺便说一句,如果您检查了 wait 调用的返回值:int result = wait(),您会收到一条信息性错误消息:

xsh.cc:26: error: cannot convert ‘wait’ to ‘int’ in initialization

关于c++ - 为什么cout会阻止后续代码在这里运行呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9279130/

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