0
내 가상 쉘에서 호출 할 수 있도록 호출 함수를 코딩하려고하는데 단순한 (하나의 명령) 및 파이프 케이스가 작동하는 동안 리디렉션을 시도하면 나에게 파일 디스크립터가 잘못되었다는 쓰기 오류. argv []는 첫 번째 명령의 이름과 매개 변수를 포함하고 argv []는 두 번째 명령과 동일합니다.명령의 출력을 파일로 리디렉션하는 동안 파일 설명 자의 오류가 발생했습니다.
다음char *argv[2][3];
argv[0][0]="ls";
argv[0][1]="-l";
argv[0][2]=NULL;
argv[1][0]="test";
argv[1][1]=NULL;
pid=invoke(argv[0],argv[1],_REDIRECT);
, 내가 무엇을 할 수 :
int invoke(char *argv1[], char *argv2[], type_c tipo)
{
int pid, pfd[2], fid;
switch(tipo)
{
case(_SIMPLE):
pid=fork();
switch(pid) {
case 0:
execvp(argv1[0],argv1);
}
break;
case(_PIPE):
pipe(pfd);
pid=fork();
switch(pid) {
case 0:
close(1);
dup(pfd[1]);
close(pfd[0]);
close(pfd[1]);
execvp(argv1[0],argv1);
}
pid=fork();
switch(pid) {
case 0:
close(0);
dup(pfd[0]);
close(pfd[0]);
close(pfd[1]);
execvp(argv2[0],argv2);
}
close(pfd[0]);
close(pfd[1]);
break;
case(_REDIRECT):
pid=fork();
switch(pid) {
case 0:
close(fileno(stdout));
fid=open(argv2[0],O_CREAT|O_WRONLY);
dup(fid);
close(fid);
execvp(argv1[0],argv1);
}
break;
}
return pid;
}
주() 함수에서, 그것을 테스트, 나는이 코드를 작성? : _REDIRECT
의 경우 사전
감사합니다. 그것은 작동합니다! (나는 의심의 여지가 없어, 여기 stackoverflow에서 모두 천재입니다!) – user3219457