Untitled

 avatar
unknown
c_cpp
a year ago
1.2 kB
5
Indexable
#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <sys/wait.h>



int main(int argc, char* argv[]) {

    // Проверяем наличие аргументов

    if (argc < 3) {

        fprintf(stderr, "Usage: %s <имя_архива> <прототип>\n", argv[0]);

        exit(EXIT_FAILURE);

    }



    int pipefd[2];

    pipe(pipefd);



    // Создаем процесс для выполнения ar t

    if (fork() == 0) {

        dup2(pipefd[1], STDOUT_FILENO);

        close(pipefd[0]);

        close(pipefd[1]);

        execl("/usr/bin/ar", "ar", "t", argv[1], NULL);

        perror("execl");

        exit(EXIT_FAILURE);

    }



    // Создаем процесс для выполнения grep

    if (fork() == 0) {

        dup2(pipefd[0], STDIN_FILENO);

        close(pipefd[0]);

        close(pipefd[1]);

        execl("/bin/grep", "grep", argv[2], NULL);

        perror("execl");

        exit(EXIT_FAILURE);

    }



    close(pipefd[0]);

    close(pipefd[1]);



    // Ждем завершения всех дочерних процессов

    while (wait(NULL) > 0);



    return EXIT_SUCCESS;

}
Editor is loading...
Leave a Comment