리눅스에서 execv 함수관련

black809의 이미지

안녕하세요 라즈베리파이에서 상황에 따라서 어떤 프로그램들을 실행시키는 코드를 작성하려고 하는데
window에서 shellexecute역할을 하는게 linux에서는 execv라고 들었습니다.
그래서 일단 간단하게 작동하는지 코드를 작성해봤는데 gcc -o test1 test1.c 이런식으로 해서 실행시켜봤는데
아무것도 안뜨더라구요 잘못된 부분이 있는지 또는 다른 좋은 방법이 있는지 아시는분 설명부탁드립니다.

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
 
int foo(char *adr[])
{
        pid_t pid;
 
        pid=fork();
        if (pid==0)
        {
                if (execv("/pi/user/a",adr)<0)           //a라는 그림파일을 실행
                        return -1;
                else
                        return 1;
        }
        else if(pid>0)
                return 2;
        else
                return 0;
}
 
int main(int argc,char *argv[])
{
        if (foo(argv)<=0)
                perror("foo");
        return 0;
}
익명 사용자의 이미지

ShellExecute()와는 다르게 exec() 계열 함수들은 실행 파일만 실행시킬 수 있고, fork() 호출에서 보시다시피 더 낮은 레벨에서 다른 방식으로 작동합니다. exec() 인자에 실행 파일이 아닌 무언가를 주면 그 형식과 연결된 프로그램이 실행되는 게 아니라 그냥 작동을 거부하죠.

https://linux.die.net/man/1/xdg-open

black809의 이미지

정말 감사합니다 링크걸어주신 함수로 그림같은 파일을 열수있다는 말씀이신거죠