我正在尝试制作一个简单的shell程序,查看了一些示例后发现大多数人使用getline()来获取输入,但是我一直在尝试使用read(),并注意到一个奇怪的bug,想知道其他人是否也看到或知道原因。
当我使用getline运行代码时,一切正常。运行程序后,我会看到终端名称,并准备接受输入。当我使用read时,在接受输入后似乎执行了shell的名称。无论我做什么都会出现这种情况。显示shell名称的行是:
当我使用getline运行代码时,一切正常。运行程序后,我会看到终端名称,并准备接受输入。当我使用read时,在接受输入后似乎执行了shell的名称。无论我做什么都会出现这种情况。显示shell名称的行是:
cout << "SweetShell-> ";
然后在这行代码之后,我要么运行读取命令,要么调用另一个进程来运行读取命令,无论哪种方式,“SweetShell-> ”的打印都会在输入之后发生。
更奇怪的是,在测试期间,我有一段代码块如下:
cout << "SweetShell-> ";
int test = read(0,buf,MAX_ARGS);
//temp is a string that is set to the input
cout << temp << " " << test;
输出结果大致如下:
3SweetShell-> ls
这意味着它先打印了空格,然后是test,接着是第一个cout,最后是temp。有人知道这是怎么回事吗?
temp
具体是什么以及这个注释是否替换了任何内容。 - Seth Johnson