2010-07-10 5 views
0

나는 해결 방법을 모르는 작은 문제가 있습니다.표준 입력에서 특정 문자열 확인

기본적으로 stdin의 입력으로 명령을받는 프로그램이 있습니다. 특정 문자열을 수신 할 때까지 계속 실행 한 다음 다른 작업을 수행합니다. Ok, 이 입력을 제어하는 ​​코드에 액세스 할 수 없습니다.하지만 새 명령을 추가하고 싶습니다.

내가 가진 아이디어는 다음과 같습니다.

. 내 프로그램에 파이프 만들기

. 프로세스 포크

. 그 중 하나는 원본 프로그램과 함께 진행하고 다른 하나는 stdin에서 읽습니다.

. 일반적인 실행을 계속하는 프로세스의 표준 입력을 파이프로 리디렉션합니다.

. stdin에서 계속 듣고있는 부분이 무엇인지 확인하고, 새로운 명령이 아니라면 파이프를 리디렉션합니다 (이전 명령이 여전히 작동하도록).

. 새로운 명령 인 경우 특정 신호를 보냅니다.

나는 pipe/fork/dup2를 C++로 구현하려고 생각해 왔지만 실행을 계속하는 프로세스에서 신호를 보내고 잡는 방법을 모르겠습니다. C++에서 어떻게 할 수 있습니까? 너희들에게 제안이 있니? 이것이 효과가 있을까요?

+2

간단한 명령 줄이 아닌 이유는 무엇입니까? 'myprog | prog_being_commanded'? –

+0

실제로. 더 간단한 명령을 원할 경우 스크립트를 사용하여 파이핑을 수행하십시오. – Cogwheel

답변

0

여러분의 프로그램은 다음을 수행해야합니다 stdin에서

  1. 읽기 데이터입니다.
  2. 새 명령 문자열을 검색하십시오. 발견되면, 일을해라.

(필요에 따라, 추출 된 커맨드 데이터를 제외하고 또는 모든 데이터)를 모두 처리 stdout에 입력을 보내고 그 다음과 같이 실행 shoulde :

$ cat input.txt | my_prog | other_prog

모든 입력되는 프로그램에 의해 처리되지 않는다면, input.txt (물론, 데이터 소스는 파일 일 필요는 없지만 임의적 일 수 있음)에서 가져온 기존 프로그램으로 이동합니다.