0
我想寫一個程序,與一些需要命令開始與轉義字符(ascii 27)的儀器進行交互,但我有麻煩測試,因爲程序似乎掛起試圖打印轉義字符。這個程序被編譯以在Ubuntu機g ++以及從侏儒末端運行:c + +不能打印轉義字符
#include <cstdlib>
#include <iostream>
#include <unistd.h>
#include <limits>
using namespace std;
int main()
{
string str;
const int numSamples=10;
const int escapeInt = 27;
const char escapeChar = escapeInt;
// sleep(30);
//Ask for the latest test results
cin.clear();
// cin.ignore(numeric_limits<streamsize>::max());
cout << "\n\n\n";
cout << escapeChar << "PF2 -" << numSamples;
cerr << "\n\n\n" << escapeChar << "PF2 -" << numSamples;
// cin.ignore(2,'\n');
getline(cin, str, '\n');
cerr << str;
int k=1;
while (k<=numSamples)//getline(cin, str))
{
getline(cin, str, '\n');
k++;
cerr << str << endl;
}
return 0;
}
輸出是隻有三個空白行,然後程序變得無法響應。它甚至不響應ctrl-c。有關如何解決此問題的任何建議?
你正在將你的輸出(包括轉義字符)發送到'cout',這聽起來像是你的終端(因爲你說你看到三條空白行)。你打算如何使儀器命令真正到達儀器? – 2014-09-22 23:01:24
你確定數據流正在被引導到正確的地方嗎?一個明顯的解釋是如果終端(或某些Linux服務)被轉義序列弄糊塗了。 – Steve314 2014-09-22 23:01:53
我使用cout,因爲我將使用socat(如果您熟悉它)通過tcp/ip將此程序的stdout連接到telnet會話。我做了一個關於這個連接兩個socat會話的虛擬運行,從一個會話運行stdio到另一個會話的stdio。這導致程序會話的輸出端(打印stderr到屏幕)凍結,而另一個會話完成併成功退出。 – 2014-09-22 23:07:13