C - программа использующая named pipes и fork - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задача - написать скрипт для вычисления тангенса заданного угла. Родительская программа получает аргумент ф-ции через параметр -p, затем создает дочерний процесс, заменяет текущий образ дочернего процесса на новый, который содержит код для вычисления тангенса. Передача аргумента для тангенса дочернему процессу должна идти через named pipe. Потом возвращаем результат в родительский процесс и выводим в stdout. ПРОБЛЕМА - дочерний код не выполняется почему-то. parent.c:
#include <stdio.h>
#include <signal.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
 
#include <sys/stat.h>
#include <sys/types.h>
 
main(int argc, char *argv[])
{
    double marg;
    int childproc;
    double result;
    int sec;
    int mypipe;
    
    if(strcmp(argv[1], "-p") != 0) {
        printf("Wrong parameter. Please use \"-p\" to specify argument for TAN function\n");
        return 0;
    }
    
    marg = strtod(argv[2], NULL);
    printf("Argumant of TAN function: %f\n", marg);
    
    if (marg == 0 && strcmp(argv[2], "0") != 0)
    printf("Incorrent argument for TAN function. Use digits to specify argument in radians with dot as separator.\n");
    
    // create named pipe
    mypipe = mkfifo("lab_fifo", S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
    mypipe = open("./lab_fifo", O_RDWR);
    printf("Named pipe created.\n");
    
    // create child process
    childproc = fork();
    if (childproc == 0) {
    printf("Child process started\n");
    // redirect input parent to a pipe and read child from pipe
    dup2(mypipe, 1);
    printf("DUP called successfully\n");
    /* Exectute Child program */
    execl("./child.out", "child.out" , NULL);
    printf("Child program started\n");
    // write to pipe argument of TAN function
    write(mypipe, argv[2], strlen(argv[2]));
    write(mypipe, "EXITCHILD", strlen("EXITCHILD"));
    printf("We wrote to child program\n");
    }
    exit(0);
}
child.c:
#include <stdio.h>
#include <signal.h>
#include <string.h>
#include <stdlib.h>
 
main(int argc, char *argv[])
{
    char buffer[1024];
    printf("Child program started\n");
    while(1) {
    read(buffer, strlen(buffer), stdin);
    if(strcmp(buffer, "EXITCHILD") == 0) {
        printf("BUFFER: %s", buffer);
        close(0);
        exit(0);
    } 
    }
}

Решение задачи: «C - программа использующая named pipes и fork»

textual
Листинг программы
read(buffer, strlen(buffer), stdin);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.714 из 5
Похожие ответы