2014-02-07 5 views
0

C 프로그램을 사용하여 실행중인 셸 (Bash)의 표준 입력에 쓸 수 있습니까? 사실 exec*() 시스템 호출 중 하나를 사용하지 않고 내 C 프로그램에서 bash을 사용하여 명령을 실행하려고합니다.C 프로그램에서 셸 명령 실행

+1

궁극적으로, 여러분은'fork()'와'exec * 'bash' 프로그램을 실행시키기 위해 호출하십시오; 당신이 ['posix_spawn()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawn.html)을 세지 않는 한 진짜 대안이 없습니다. 표준 입력 (프로그램에서?)과 표준 출력 (프로그램으로?)과 표준 오류, 올바른 쉘 옵션 ('-i'?)을 처리하기 위해'bash '에 배관을 구성하는 문제가 있습니다. Captive Shell에서 어떤 종류의 명령을 실행할 것으로 예상합니까? –

+0

난 단지 내 프로그램에서 문자열 입력을 받아서이 문자열을 bash의 실행중인 인스턴스에 보내고 bash가 나를 위해 실행을하고 내 프로그램에 해당 출력을 보내길 원한다. –

+0

임의로 실행중인 Bash 인스턴스에 임의로 명령을 보낼 수는 없습니다. 그들 중 대부분은 다른 사람의 일을 묶어두고 잘못된 현재 디렉토리에 있고 잘못된 환경이 설정되어 있습니다. 자신 만의 쉘을 실행해야합니다. 주의가 필요하다면 각각의 명령마다 새로운 쉘을 실행할 필요는 없지만, 통신 할 때'bash '를'fork()'하고'exec *()'할 필요가 있습니다. 2 ~ 3 개의 파이프 (쉘에 대한 표준 입력, 쉘의 표준 출력, 별도의 쉘 표준 오류)가 필요할 것이므로이를 읽는 방법에 대해 생각할 필요가 있습니다. –

답변

0

/bin/echo은 일반적으로 C 프로그램입니다.

/bin/echo ls | sh 

보라! C 프로그램이 실행중인 쉘의 표준 입력에 쓰고 명령이 실행되었습니다. 이것은 명백하게 가능합니다.

man popen은 이제 친구입니다. (system()과 같은 다른 것들에 대한 논의와 따옴표의 필요성과 같이 수퍼 유저의 범위를 벗어나는 것은 더 이상 없습니다.)

+0

'/ bin/echo' 프로그램도 있습니다; 그러나 대부분의 셸에는 'echo'명령이 내장되어 있습니다. –

+0

내장을 사용하면 응답이 불필요하게 진절머리가납니다. 반면에'/ bin/echo'를 가리키며 "컴파일 된 C 프로그램이 그 파일에 있습니다."라고 말할 수 있습니다. – JdeBP