C 코드에서 셸을 어떻게 실행합니까? 그러나C 코드에서 셸을 제어 하시겠습니까?
system("/bin/sh -i");
:
은 내 쉘은 어쩌면 당신이 상호 작용해야 쉘 말할 필요 나
system("/bin/sh");
exec("/bin/sh");
C 코드에서 셸을 어떻게 실행합니까? 그러나C 코드에서 셸을 제어 하시겠습니까?
system("/bin/sh -i");
:
은 내 쉘은 어쩌면 당신이 상호 작용해야 쉘 말할 필요 나
system("/bin/sh");
exec("/bin/sh");
을 위해 작동하지 않았다 /bin/sh
다음에 위치 , 나는 원래 system()
호출도 쉘 프롬프트를 생성해야한다고 생각합니다.
모두 표기 (로하고 '-i'제외)이 프로그램은 ('출구'와 RETURN 또는 제어-D 입력하여 이전 쉘로 복귀), 나에게 쉘 프롬프트를 제공 :
을 -i 리디렉션 문제의 일종이 발생하여int main()
{
int ret = system("/bin/sh");
printf ("Shell returned %d\n", ret);
return 0;
}
모든 것이 최대한 빨리 출력을 생성하는 명령을 입력 할 때 응답 : 나를 위해 예상대로
#include <stdlib.h>
int main(void)
{
system("/bin/sh -i");
return 0;
}
이 프로그램은 작동합니다.
과 exec() 사이에 중요한 차이가 있습니다. 원하는 명령이 실행되기 때문에 먼저 불필요한를 시작하여,
는 거의 사용되지 이유는/bin/sh -c /bin/sh
과 동일한 system("/bin/sh")
있도록 효과적으로 명령 줄에서 /bin/sh -c yourCommand
과 동일() 시스템, 쉘 프로세스. 이 때문에 실행되지 않았을 것입니다 후
int main()
{
int ret = exec("/bin/sh");
printf ("Shell returned %d\n", ret);
return 0;
}
의 printf() 모든 것을 :
간부는() 전체 프로세스 이미지의 원인의 I가 쓴, 그래서 만약 지정된 명령으로 대체 할 전체 프로세스는 /bin/sh의 인스턴스로 변환됩니다. 자식 명령을 실행하는 올바른 방법은 자식을 fork 한 다음 exec하고 부모를 기다리는 것입니다.
작동하지 않았습니까? 그것에 대해 자세히 설명해 주시겠습니까? 그리고 임원 계열의 기능 중 어느 것을 사용 했습니까? – vpit3833
어떻게됩니까? 더 자세한 내용은 please – Drakosha
사실 내가 그 명령 중 하나를 사용하지 않고 내 C 코드를 실행하면 내 코드가 대기 상태 (그게 내가 사용하는 C 응용 프로그램의 특성 때문에)의 일종으로 간다. 대기 상태로 들어가기 전에이 명령을 시도했지만 쉘 프롬프트가 표시되지 않습니다. – baltoro