bestsource

C 함수로 셸 내장 명령을 실행하려면 어떻게 해야 합니까?

bestsource 2023. 7. 23. 14:33
반응형

C 함수로 셸 내장 명령을 실행하려면 어떻게 해야 합니까?

execv()와 같은 C 언어 함수를 통해 리눅스 명령 "pwd"를 실행하고 싶습니다.

문제는 "pwd"라는 실행 파일이 없고 "echo $PWD"를 실행할 수 없다는 것입니다. 왜냐하면 echo 역시 실행 파일을 찾을 수 없는 내장 명령어이기 때문입니다.

만약 당신이 단지 당신의 c 프로그램에서 셸 명령을 실행하고 싶다면, 당신은 다음을 사용할 수 있습니다.

   #include <stdlib.h>

   int system(const char *command);

당신의 경우에는,

system("pwd");

문제는 "pwd"라는 실행 파일이 없고 "echo $PWD"를 실행할 수 없다는 것입니다. 왜냐하면 echo 역시 실행 파일을 찾을 수 없는 내장 명령어이기 때문입니다.

이게 무슨 뜻입니까?/bin/에서 언급된 패키지를 찾을 수 있을 것입니다.

sudo find / -executable -name pwd
sudo find / -executable -name echo

실행해야 합니다.sh -c echo $PWD대체적으로sh -c셸 명령을 실행합니다.

(사실,system(foo)로 정의됩니다.execl("sh", "sh", "-c", foo, NULL)따라서 셸 내장형에 적합합니다.)

만약 당신이 단지 가치를 원한다면.PWD,사용하다getenv,그래도.

execl() 함수를 사용할 수 있습니다.

int execl(const char *path, const char *arg, ...);

여기에 표시된 것과 같습니다.

#include <stdio.h>
#include <unistd.h>
#include <dirent.h>

int main (void) {

   return execl ("/bin/pwd", "pwd", NULL);

}

두 번째 인수는 프로세스 테이블에 표시되는 프로세스의 이름이 됩니다.

또는 getcwd() 함수를 사용하여 현재 작업 디렉터리를 가져올 수 있습니다.

#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
#define MAX 255

int main (void) {
char wd[MAX];
wd[MAX-1] = '\0';

if(getcwd(wd, MAX-1) == NULL) {
  printf ("Can not get current working directory\n");
}
else {
  printf("%s\n", wd);
}
  return 0;
}

언급URL : https://stackoverflow.com/questions/19209141/how-do-i-execute-a-shell-built-in-command-with-a-c-function

반응형