簡體   English   中英

函數system()如何在c ++中工作?

[英]how does the function system() work in c++?

我試圖理解使用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

您觀察到的特定行為的原因似乎只是cout緩沖: Hello不會立即打印,而是保存在緩沖區中直到輸出endl (或緩沖區完全填充,或者您顯式調用flush() )。 這與system()調用無關。

一個更簡單的例子:

cout << "Hello";
sleep(10);
cout << "World";

兩個單詞將同時出現,而不是延遲10秒。

它可能不是系統調用的情況,而是輸出流緩沖。

cout << "xxx"不需要輸出內容,因此system調用的程序可以在cout將緩沖區刷新到控制台之前執行。

嘗試在cout << "Hello"之后添加cout.flush()或者寫cout << "Hello" << flush

另外: cout << endl自動調用flush

system在shell中運行命令。 但你的問題不是system而是cout cout是行緩沖的,即。 它將不會刷新(寫出)其數據,直到遇到新的行字符。 你需要用cout << flush明確地刷新它。

關於“ system庫功能如何工作?”的答案。 通常是特定於操作系統的。 請參閱此處以獲得Linux的觀點。 請注意, system 不是 系統調用,並且在使用系統(3)和刷新cout緩沖區之間存在先驗無關。

你應該在調用system之前刷新stdout

 cout << "Hello " << flush;

或者最好

 cout << "Hello " << endl;

您正在觀察的行為是因為cout緩沖而您忘記刷新緩沖區。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM