C/Code snippet
[C] exec - execl 예제, c언어 내부에서 ls 같은 시스템 명령어 실행하기
2022. 6. 3. 00:11반응형
먼저 간단한 아래의 예제를 보고 가자.
소스코드 1. execl을 활용한 ls 명령어를 실행해보기
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
int main(int argc, char* argv[])
{
if (execl("/usr/bin/ls", "ls", "-al", NULL) == -1)
{
printf("execve error\n");
return 1;
}
printf("this is ls.\n");
return 0;
}
출력화면
XXXX@DESKTOP-QMGL8TS:~/07practice_c_test$ ./a.out total 32 drwxr-xr-x 2 gildong gildong 4096 Jun 2 23:57 . drwxr-xr-x 29 gildong gildong 4096 Jun 2 23:57 .. -rwxr-xr-x 1 gildong gildong 16736 Jun 2 23:55 a.out -rw-r--r-- 1 gildong gildong 272 Jun 2 23:55 execl.c |
소스코드 2. execl을 활용해서, 외부 프로그램 실행하기
execl.c
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
int main(int argc, char* argv[])
{
if (execl("./b.out", "./b.out", NULL) == -1)
{
printf("execve error\n");
return 1;
}
printf("this is ls.\n");
return 0;
}
print.c
#include <stdio.h>
int main(void)
{
printf("hello world\n");
return 0;
}
결과화면
# gcc execl.c # gcc print.c -o b.out # ./a.out hello world |
이론
exec를 사용하게 되면, 기존의 exec를 실행시킨 프로세스는 exec가 실행한 프로그램으로 대체가 된다. 그렇기 때문에 exec를 실행시킨 프로세스 ID와 exec로 실행된 프로세스 ID와 같게 된다. 실제 테스트한 출처 -> 링크1
execl, execlp 차이점 이해하기 -> 링크2
- execl 예제
execl( "/bin/ls", "/bin/ls", NULL);
- execlp 예제 1
execlp( "ls", "ls", NULL);
- execlp 예제 2
execlp( "ls", "ls", "-al", "/tmp", NULL);
- execve 예제
(인수를 배열화 함, 환경설정가능)
execve( "./a.out", argv, env_pameter);
함수 이름 |
int execl( const char *path, const char *arg, ...) |
int execlp( const char *file, const char *arg, ...) |
int execle( const char *path, const char *arg ,..., char * const envp[]) |
int execv( const char *path, char *const argv[]) |
int execvp( const char *file, char *const argv[]) |
int execve (const char *filename, char *const argv [], char *const envp[]) |
반응형
'C > Code snippet' 카테고리의 다른 글
[C] 예제코드: 파일읽기, 삭제 (0) | 2023.01.15 |
---|---|
[C] 문자열 파싱 (strtok없이), strcpy, strdup, strlen (0) | 2022.07.10 |
[C/코드해석] pop_string (0) | 2022.05.26 |
[C][Linux] realloc, malloc 그리고 malloc 사이즈 구하기 (0) | 2022.05.22 |
[C] 가변 리스트 (pack된 속성)에 대한 고찰, Variable list of packed attribute (0) | 2022.05.22 |