2 つのスレッドを実行するプログラムを作成したいと考えています。メインスレッドが仕事をしている間、他のスレッドはインタラクティブなコマンドラインとして機能し、ユーザー入力を読み取り、端末に何かを出力します。
私のコードは次のようになります。
#include <pthread.h>
//Needed for pthread
#ifndef _REENTRANT
#define _REENTRANT
#endif
#include "whatever_u_need.h"
bool g_isDone = false;
void* cmdMain( void* ) {
static char* buf;
buf = (char*)malloc( 257 );
buf[256]=0;
size_t size = 256;
while(!g_isDone) {
printf( "> " );
getline( &buf, &size, stdin );
if( buf[0] == 'q' ) {
g_isDone =true;
break;
}
//echo
puts(buf);
}
free( buf );
pthread_exit(NULL);
}
pthread_t g_cmd_thread;
int main() {
pthread_create( &g_cmd_thread, NULL, cmdMain, NULL );
while(1) {
//non-interactive jobs
}
pthread_cancel( g_cmd_thread );
return 0;
}
問題は、getline() を実行するときに ENTER を押すと、端末が 2 行下に移動することです。間違いなく、両方のスレッドが「ENTER メッセージ」を受け取りました。メイン スレッドのターミナル I/O をオフにしながら、他のスレッドのコマンド ライン機能を維持するにはどうすればよいですか?
私は bash シェルで Ubuntu を使用しています。