나는이 질문이 많이 제기되지만 나는 아직도 내 문제를 해결하는 방법에 관해서는 정말로 혼란 스럽다. 여러 파이프의 가능성에 대한 명령 줄 입력을 처리하는 코드를 작성하려고 시도했습니다. 그러나 실행이 올바르게 작동하지 않더라도 실패하고 코드가 잘못되었습니다. 버그는 일단 아이들을 갈라 놓았습니다. 첫 번째 명령이 실행 된 후 파이프가가는 다음 명령으로 갈 수 없습니다. 잘못된 파일 설명자를 잡지 않고 파이프의 다음 명령으로 이동하려면 어떻게합니까? 다음은 코드 덩어리입니다.리눅스에서 반복적 인 파이핑 구현
a = 0;
while (a < cmdnum)
{
pid[a] = fork();
if(pid[a] == 0)
{
if(a == 0)
{
close(1);
dup(p1_to_pn[a][1]);
for(k = 0; k < nump; k++)
{
close(p1_to_pn[k][0]);
close(p1_to_pn[k][1]);
}
args = tokenize(cmd[a]);
execv(args[0], args);
}
else if (a == (cmdnum-1))
{
close(0);
dup(p1_to_pn[a][0]);
for(k = 0; k < nump; k++)
{
close(p1_to_pn[k][0]);
close(p1_to_pn[k][1]);
}
args = tokenize(cmd[a]);
i = execv(args[0], args);
}
else
{
close(0);
dup(p1_to_pn[a][0]);
close(1);
dup(p1_to_pn[a][1]);
for(k = 0; k < nump; k ++)
{
close(p1_to_pn[k][0]);
close(p1_to_pn[k][1]);
}
args = tokenize(cmd[a]);
execv(args[0], args);
}
}
a++;
}
명확히하기 위해 셸 (또는 셸처럼 작동하는 무언가)을 작성하고 있습니까? –
쉘 유형, 예 : – GFXGunblade