我试图理解使用system(“some command”)在c ++中进行的系统调用。这是代码
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
cout << "Hello ";
system("./pause");
cout << "World";
cout << endl;
return 0;
}
可执行文件“pause”是从以下代码
创建的#include <iostream>
using namespace std;
int main()
{
cout<<"enter any key to continue\n";
cin.get();
return 0;
}
我得到以下输出
enter any key to continue
1
Hello World
有人可以向我解释输出吗?我在期待这个 -
Hello
enter any key to continue
1
World
答案 0 :(得分:5)
您观察到的特定行为的原因似乎只是cout
缓冲:Hello
不会立即打印,而是保留在缓冲区中,直到输出endl
(或缓冲区完全填满,或者您明确调用flush()
)。这与system()
电话无关。
一个更简单的例子:
cout << "Hello";
sleep(10);
cout << "World";
两个单词将同时出现,而不会延迟10秒。
答案 1 :(得分:5)
这可能不是系统调用的情况,而是输出流缓冲。
cout << "xxx"
不需要输出内容,因此system
调用的程序可以在cout
将缓冲区刷新到控制台之前执行。
尝试在cout.flush()
之后添加cout << "Hello"
或写cout << "Hello" << flush
另外:cout << endl
自动调用flush
答案 2 :(得分:5)
system
在shell中运行命令。但问题不在于system
,而在于cout
。 cout
是行缓冲的,即。它将不会刷新(写出)其数据,直到遇到新的行字符。您需要使用cout << flush
明确地刷新它。
答案 3 :(得分:4)
答案&#34; system
库函数如何工作?&#34;通常是特定于操作系统的。有关Linux的观点,请参阅here。请注意system
不 a system call并且在使用system(3)和刷新cout
缓冲区之间存在先验无关。
您应该在调用system
cout << "Hello " << flush;
或者最好
cout << "Hello " << endl;
您正在观察的行为是因为cout
缓冲而您忘记刷新缓冲区。