我有execlp問題。當我不知道如何正確地將指針數組重定向到execlp。比如我想使用重定向到execlp()
ls -l | sort -n
我的程序只需要「LS」和「排序」
int pfds[2];
pipe(pfds);
child_pid = fork();
if(child_pid==0)
{
close(1);
dup(pfds[1]);
close(pfds[0]);
execlp(*arg1, NULL);
}
else
{
wait(&child_status);
close(0);
dup(pfds[0]);
close(pfds[1]);
execlp(*arg2, NULL);
}
所有的命令都是指針數組,其中:ls -l
是在第一個表和sort -n
在第二
你最大的問題是讓'ls'上的父'wait'然後exec'sort'是錯誤的方法。 – Duck
你是否建議刪除等待命令? – user3174326
不,你應該'叉'兩個孩子(在這種情況下)形成一條管道。這個原理現在的作用是,你可能已經列出了小的dirs。如果你是一個較大的那個,你的'ls'將寫入管道,直到它填充PIPE_BUF字節,然後它將在寫入時被阻塞(因爲沒有讀取它)並且永不結束。你會永遠等待一些不會結束的事情(自己)。 – Duck