2 개의 쓰레드를 실행하는 프로그램을 작성하고 싶습니다. 주 스레드가 작업을 수행하는 동안 다른 스레드는 대화식 cmdline 역할을하고 사용자 입력을 읽은 다음 터미널에 인쇄합니다.linux : 하나의 쓰레드를위한 멀티 쓰레드, 블록 터미널
내 코드는 이제 다음과 같습니다
#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 메시지"를 수신했습니다. 주 스레드에 대한 터미널 I/O를 끄고 다른 스레드의 명령 줄 기능을 유지하려면 어떻게합니까?
저는 bash 쉘과 함께 우분투를 사용하고 있습니다.
@David Schwartz 편집을했습니다. – Kh40tiK