2

我正在用 C 语言编写一个从文件中读取的程序(例如,在我的 .c 源文件的同一文件夹中名为 ffff 的文件):该文件包含两个命令:

ls -l
tac

我的程序打开这个文件,读取命令和相关参数,并通过使用管道向我显示相同的输出

ls -l | tac

我已经使用了 get 行并且我想使用execvp但输出是

execvp 错误:没有这样的文件或目录。

你能帮助我吗?这是我的代码:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <error.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
 int mypipe[2];
 FILE *stream;
 char *line=NULL;
 size_t len=0;
 ssize_t read;

 /*controllo il numero degli argomenti passati*/
 if(argc != 2){
 fprintf(stderr, "no such arguments \n");
 exit(1);
 }

/*apro il file in sola lettura*/
stream=fopen(argv[1], "r");
if(stream==NULL){
   exit(EXIT_FAILURE);
}

/*apro la pipe*/
if(pipe(mypipe) == -1){
   fprintf(stderr, "Error pipe\n");
   exit (1);
}

if(fork()==0){
   close(1); /*chiudo lo stdout*/
   dup(mypipe[1]); /*rimpiazzo lo stdout con la pipe*/
   close(mypipe[0]); /*chiudo la read della pipe*/
   close(mypipe[1]);

   read=getline(&line, &len, stream);

   execvp(argv[1], &line);
   perror("execvp failed");
   exit (1);
}
if(fork()==0){
   close(0); /*chiudo lo stdin*/
   dup(mypipe[0]); /*rimpiazzo lo stdin con la pipe read*/
   close(mypipe[1]); /*chiudo la write della pipe*/
   close(mypipe[0]);

   read=getline(&line, &len, stream);
   execvp(argv[1], &line);
   perror("execvp 2 failed");
   exit (1);
}
close(mypipe[0]);
close(mypipe[1]);
wait(0);
wait(0);
free(line);
fclose(stream);
exit (0);
}
4

0 回答 0