쉘을 만들고 있는데 시스템 호출 'execvp'에 문제가 있습니다. 나는이 주제에 관해 몇 가지 다른 질문을 보았지만 막연했고 완전히 다루어지지 않은 것처럼 보였다. (누가 질문을했는지 많은 정보를 제공하지 못했고 좋은 대답을 얻지 못했다.) 분명히 난 내 자신의 명령 행을하고 난 mysh some/path $ ps -a
처럼 stdin에서 사용자의 입
나는 파일을 검색하고 결과를 파이프와 같은 다른 명령으로 전송하는 프로그램을 만들고있다. ls | sort 프로그램을 실행할 때 아무 일도 일어나지 않습니다. 내가 생각하는 문제는 자녀가 부모가 읽기를 시작하기 위해 SO 버퍼에서 쓰기를 중지 할 때까지 기다리는 것입니다. 이것은 stdout에 보내지는 것이고 파이프는 다른 명령으로 보내야하는 것입니다. [
명령을 받아 실행하는 작은 쉘 프로그램을 작성하고 있습니다. 사용자가 유효하지 않은 명령을 입력하면 if 문은 -1을 반환합니다. 명령이 올 바르면 명령을 실행하지만 일단 명령을 실행하면 프로그램이 종료됩니다. 내가 그 뒤에 코드 줄을 실행하지 않는다면 내가 뭘 잘못하고 있니? 나는 execvp (command.argv [0], command.argv)를
fork() 및 execvp()을 사용하여 프로세스를 실행하는 데 문제가 있습니다. 실행하는 프로그램의 이름 #define MAXARGS 2
struct pcb {
pid_t pid; // system process ID
char *args[MAXARGS]; // program name and args
int arriva
execvp을 호출 할 때, 예를 들어 execvp(echo, b)을 호출하면 b는 명령 a에 대한 인수 배열입니다. 나중에이 배열을 변경하면 이전에 작성한 execvp 호출에 영향을 줍니까? execp (echo, b)를 호출하면 b의 내용 대신 (null) 출력됩니다. 왜 인자를 올바르게 전달해야하는지, 그리고 내가해야 할 일을 지적 할 수 있습니까?
내 코드는 다음과 같습니다 execvp(command, args);
인수는 char* args[] 명령입니다 char* command ls -l에 대한 예를 들어, 명령은 LS와 인수가 실행 한 후 -l하지만 왜이다 execvp(command, args) 결과는 ls이 아니며 ls -l ??
이것은 더 큰 프로그램의 일부분이지만 execvp의 출력을 얻으려는 것입니다. execvp를 정확하게 지시 한 dup2으로 설정했습니다 파이프에. 파이프의 전체 길이를 읽으려면 read를 사용할 때 내 문제가 발생합니다. execvp의 출력이 입력에 따라 다를 수 있으므로 얼마나 큰지는 알 수 없습니다. int fd[2];
pipe(fd);
execvp는 이렇게 정의된다 사용되는 이와 같은 코드를 배제 int execvp(const char *file, char *const argv[]);
: const char* argv[] = {"/bin/my", "command", "here", NULL};
execvp(argv[0], argv);
이것이 우발적 생략 되었습니까? 이 주위 con