Необходимо выполнять команды, которые принимают входные данные из буфера, такие как wc, unique и т. Д., Используя pipe в C - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть некоторые данные в моем буфере (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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...