2008-10-23 5 views
2

C 프로그램 (p1)에서 p1의 표준 출력에서 ​​표준 입력을 읽는 동적으로 생성 된 명령 (및 해당 인수)을 시작하는 방법은 무엇입니까? 것을** 휴대용 C **에서는 명령의 표준 입력을 실행 프로그램의 표준 출력에 연결하는 명령을 실행하는 방법은 무엇입니까?

참고 :

  1. 이 표준 출력 이외의 방법 -> 표준 입력 배관도 OK입니다은 휴대용 윈도우에서 및 리눅스입니다 를 제공했다.

  2. 저는 C++, Java, Perl, Ruby, 파이썬 등을 사용할 수 없습니다.

또한 Windows 빌드에 대해 MinGW 종속성이 있습니까?

REOPENED : 아래 질문은 Linux에 대한 대답이지만이 질문은 휴대용 방법을 원합니다. Execute program from within a C program

+0

참고로 C 솔루션 만 선호합니다. (불쌍하게해서 죄송합니다!) – user10955

답변

2

솔직히 말하면 정확히 달성하고자하는 것이 100 % 명확하지 않습니다.

하지만 그것을 이해, 당신은 당신은 표준 입력에서 물건을 덤프 어떤 스트림으로 OS을 사용하여 다음

bp::child cs = p.start(); 
bp::postream& os = cs.get_stdin(); 

같은 일을하고 있습니다 Boost.Process

을 살펴 수 자녀 과정의

어쨌든, 라이브러리 w.r.t를 사용하면 많은 것을 얻을 수 있습니다. 파이프 리디렉션 및 연결.

+0

흠, 부스트. 800 파운드짜리 고릴라가 내가 연결하고 악수해야 할 것입니다. 나는 전체적인 경량의 C 응답을 여전히 감시 할 것이다. 그래도 고마워. (이제 C++을 조건에서 삭제할 것입니다.) – user10955

1

링크 된 사용자 (거부하는 사용자)는 POSIX 파이프를 참조합니다. POSIX는 표준 C에없는 기능을 추가하는 C에 대한 확장입니다. POSIX 파이프는 이러한 기능의 좋은 예입니다. 표준 C에 해당 기능이 없기 때문에 POSIX에 추가되었습니다.

4

Microsoft C 런타임은 popen 대신 _popen을 호출하지만 Windows (콘솔 응용 프로그램 용)와 Linux에서 동일한 기능을 수행하는 것으로 보입니다.

1

glib 라이브러리는 C로 작성되었으며 Linux와 Windows 모두에서 잘 테스트 된 구현이 있습니다. The manual section on spawning new processes은 새 프로세스를 시작하고 g_spawn_async_with_pipes 호출을 사용하여 stdin 및 stdout 핸들에 연결하는 방법에 대한 정보를 제공합니다.

관련 문제