У меня есть некоторые данные в моем буфере (char []), затем мне нужно выполнить команды (например, wc, unique и т. Д.), Используя execvp (это будет принимать данные из буфера).
Я сталкиваюсь с проблемами, покареализовать его с помощью трубы. Пожалуйста, помогите или предложите альтернативный и простой способ продолжения.
Я пробовал с трубой и вилкой, но столкнулся с проблемами
Код: Метод, где я выполняю команду (предпочтительно использование одной трубы)
char * executeCmd(char inp[])
{
//i am getting the command to execute such "ls" in first iteration then "wc"
char *ptr,*ptr1;
char args[100][100];
ptr=inp;ptr1=inp;
int count=0;
while(*ptr !='\0')
{
if(*ptr !=' '){
ptr++;
}
else
{
if(*ptr ==' ')
{
*ptr='\0';
ptr++;
strcpy(arg[count],ptr1);
printf("Argument-%s\n",args[count]);
ptr1=ptr;
count++;
}
}
}
printf("lastone-%s\n",ptr1);
strcpy(args[count],ptr1);
char path[100];
char **arg;
argToSend =(char **) malloc((count+2) * sizeof(char*));
if(count+1){
for(int i=0;i<=count;i++)
{
arg[i] = malloc(20);
strcpy(arg[i],arg[i]);
printf("string----%s\n",argToSend[i]);
}
arg[count+1]=NULL;
}
//storing the command in arg={"wc"}
char *buff = (char *)malloc(1500);
int fd[2];
pipe(fd);
if(!fork()){
close(1);dup(fd[1]);
close(fd[0]);
execvp(argToSend[0],argToSend); /*------> in first call execvp("ls",{ls}) || in second call execvp("wc",{wc})*/
perror("Error in execvp-");
abort();
}
//wait(NULL);
close(0);
dup(fd[0]);
close(fd[1]);
read(fd[0],buff,1500); //Reading the output
// buff[1500];
printf("My Buffer-%s\n",buff);
//strcpy(sendMsg.Data,buff);
return buff;
}