execvp()는 논리 연산자를 고려합니까?

execvp()는 논리 연산자를 고려합니까?

수업 과제의 일부로 나만의 명령 셸을 만들어야 합니다. 셸에서는 &&및 같은 논리 연산자를 포함하여 다양한 명령줄 인수를 허용하도록 해야 합니다 ||. 나는 처음에 첫 번째 명령이 실행되면 두 번째 명령이 execvp()를 호출하여 모든 작업을 수행하도록 하려는 경우에만 논리적으로 실행되도록 쉘을 프로그래밍해야 한다고 가정했습니다. 그러나 execp()에 대한 두 번째 매개변수는 아마도 &&커넥터를 설명하므로 간단히 매개변수로 전달할 수 있다는 것을 깨달았습니다. 입력하면 execvp("./shell", "echo hello && mkdir testing")논리 연산자가 고려됩니까 &&?

답변1

이러한 exec*()호출은 단순히 프로그램을 시작하고 명령줄 인수를 전달합니다. 기본 시스템 호출은 인수가 무엇을 의미하는지 전혀 모릅니다. 이는 시작된 프로세스에 따라 다릅니다.

exec*()POSIX 호환 쉘을 실행하고 여기에 명령줄을 전달할 수 있습니다(예 execl("/bin/sh", "/bin/sh", "-c", "echo hello && mkdir testing", (char *) NULL): 를 사용하여 mkdir쉘은 성공할 경우에만 명령을 실행합니다) echo.

하지만 당신의 임무는구현하다쉘과 &&운영자 자체는 이미 존재하는 외부 쉘을 호출하여 작업을 수행하는 것은 실제로 작업의 정신에 없는 것 같습니다. C 코드 한 줄을 작성할 필요 없이 기존 셸을 사용하여 시작할 수 있습니다.

관련 정보