사용자에게 명령을 입력하라는 메시지를 표시하고 exec를 사용하여 해당 명령을 실행하려고합니다.유닉스에서 사용자 입력으로 C에서 execvp()를 사용하려고 시도했습니다.
예를 들어 "ls -la"라고 입력하면 해당 명령을 실행해야합니다. 나는 다음과 같은 코드를 시도했다 :
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main()
{
int ret, num_args;
printf("Enter number of arguments (Example: \"ls -la\" has 1 argument): ");
scanf("%d", &num_args);
char *cmd[num_args];
printf("Enter command name: ");
scanf("%s", &cmd[0]);
int i;
for (i = 0; i < num_args; i++)
{
printf("Enter parameter: ");
scanf("%s", &cmd[i]);
}
execvp(cmd[0], cmd);
}
그러나, 나는 그것이 나에게 "분할 오류"
$ ./a.out
Enter number of arguments (Example: "ls -la" has 1 argument): 2
Enter command name: ls
Enter parameter: -la
Enter parameter: .
Segmentation fault
$
어떤 아이디어를 준 다음 실행을 시도 할 때?
컴파일러는 getline이 무엇인지 알지 못합니다. #include 줄이나 컴파일러 자체가 없기 때문입니까? –
'getline'은 C의 GNU 함수입니다. http://www.gnu.org/s/libc/manual/html_node/Line-Input.html –
컴파일러와 운영 체제는 무엇입니까? –