我想實現一個仿真以下shell命令行一個C程序:排序:Stat失敗 - :錯誤的文件描述符
find . -type f -ls | cut -d " " -f 3- | sort -n -k 6 >file.txt ; less <file.txt
我是很新的工藝,管道和套接字和後嘗試幾個實現,並試圖尋找問題的解決方案,我相信我還沒有足夠的技巧來自己理解錯誤。 有人能解釋我在這裏做錯了嗎?當我嘗試執行代碼,我得到的錯誤:
sort: stat failed: -: Bad file descriptor.
這裏與sort命令相關的我的孩子功能:
// child 3 (sort)
void child3(int *pipe_fd)
{
int fdo;
// fecha parte do write do pipe
if (close(pipe_fd[1]) == -1) erro("child 3-> failed to close pipe[1] (pipe_fd)");
// alteração std_in ler do pipe
if(dup2(pipe_fd[0], 0) == -1) erro("child 3 -> failed to dup2 (pipe_fd)");
// "fechar o file descriptor do pipe" pois já o redirecionamos
if(close(pipe_fd[0]) == -1) erro("child 3 -> failed to close pipe[0]");
// criação do file.txt com direitos de escrita e leitura
if (fdo=open("file.txt", O_CREAT|O_WRONLY, 0600) == -1)
erro("child_3 failed to open/create 'file.txt'");
// redirecionamento do stdout para o sort
if(dup2(fdo, 1) == -1) erro("child 3 -> failed to dup2 (fdo)");
// fecho do file descriptor criado no open
if(close(fdo) == -1) erro("child 3 -> failed to close pipe[1]");
// executa o sort
if (execlp("sort", "sort", "-n", "-k", "6",NULL) == -1)
erro("child_3 failed to execlp");
}
在此先感謝和我很抱歉,如果後期不結構正確,這是我在這裏的第一篇文章。 :)
與其傾倒你的整個程序供我們調試,不如提供一個[mcve]。 –
@PaulR對不起,我得到它 – Aereth
沒問題 - 作爲獎勵你可能會發現,在減少這個過程到一個最小的例子,無論如何你發現你的錯誤! ;-) –