내 C 지식은 매우입니다. 전달 된 인수를 execve
에 사용하고 싶기 때문에 클라이언트에서 서버에 전달 된 String을 토큰 화하려고합니다. buffer
을 통해 전달 된 인수는 *argv
에 복사해야하고 buffer
의 토큰에 argv[0]
, argv[1]
등으로 액세스 할 수 있도록 토큰 화되어야합니다. 분명히 잘못하고 있습니다. 위의 코드와 함께 인수 "/ 빈/날짜 -u"를 전달execve()에 char *로 전달할 문자열 토큰 화
n = read(sockfd, buffer, sizeof(buffer));
strcpy(*argv, buffer);
printf("buffer:%s\n", buffer);
printf("argv:%s\n", *argv);
printf("argv[0]:%s\n", argv[0]);
printf("argv[1]:%s\n", argv[1]);
*argv = strtok_r(*argv, " ", argv);
printf("argv:%s\n", *argv);
i = fork();
if (i < 0) {
//Close socket on fork error.
perror("fork");
exit(-1);
} else if (i == 0) {
//execve on input args
execve(argv[0], &argv[0], 0);
exit(0);
} else {
wait(&status);
//close(sockfd);
}
는의 출력을 제공합니다
buffer:/bin/date -u
argv:/bin/date -u
argv[0]:/bin/date -u
argv[1]:(null)
를 내가의 출력 무엇 :
buffer:/bin/date -u
argv:/bin/date -u
argv[0]:/bin/date
argv[1]:-u
I strtok_r()
을 사용해 보았지만 의도 한대로 작동하지 않았습니다. 내가 삽입 한 스 니펫은 argv:/bin/date
의 출력을내는 코드 :
*argv = strtok_r(*argv, " ", argv);
printf("argv:%s\n", *argv);
입니다.
감사합니다.
편집 : 위와 같이 명시 적으로 토큰화할 필요가 없습니다. buffer
. 서버로 전달 된 클라이언트에서 인수를 얻는 방법은 아무 문제가 없습니다.