반응형
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
반응형
'bestsource' 카테고리의 다른 글
오라클에서 레코드 유형에 대한 루프를 쓰는 방법 (0) | 2023.07.23 |
---|---|
Oracle에서 두 날짜 사이의 일 수(날짜 포함)를 가져옵니다. (0) | 2023.07.23 |
C를 사용하여 URL을 구문 분석하는 가장 좋은 방법은 무엇입니까? (0) | 2023.07.23 |
구조물 시간 지정 형식 지정 (0) | 2023.07.23 |
Backbone.js에서 하위 뷰를 초기화하고 렌더링하는 방법은 무엇입니까? (0) | 2023.07.23 |