C и именованные каналы. Можно ли выполнить одну программу из другой, чтобы записать в канал?

Я работаю над заданием, в котором две программы должны отправлять сообщения родительской программе, используя именованный канал. На данный момент у меня есть работающая программа "писатель" и работающий "читатель". Выполнение каждой программы в отдельных терминалах (начиная с родительской программы в первую очередь) работает должным образом. Теперь у меня вопрос: возможно ли, чтобы родительская программа выполнила программу-писатель, которая затем записывает в канал и завершает работу, а затем родитель читает из канала и выполняет цикл, повторяя процесс. Вот конкретные программы, на которые я ссылаюсь.

Родитель называется "мост":

// File bridge.c

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include <linux/stat.h>
#include <time.h>
#include <sys/types.h>
#include <fcntl.h>


int main(){

    char *sharedPipe = "MYFIFO";
    int pipe;
    char readBuffer[80];

    umask(0);

    pipe = mkfifo(sharedPipe, 0666);
    if(pipe < 0){
        perror("mkfifo");
        exit(2);
    }
    time_t entryTime, currentTime;

    while(1){
        entryTime = time(NULL);

        pipe = open(sharedPipe, O_RDONLY); // removed nonblock

        pipe = read(pipe, readBuffer, 80);

        currentTime = time(NULL);

        printf("%s", ctime(&currentTime));
        printf("Bridge received message: %s\n\n", readBuffer);

        sleep( 30 - (currentTime - entryTime) );        
    }
}

И это ребенок ("lifeSupport"):

// File lifeSupport.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include "randapi.h"
#include <sys/types.h>
#include <fcntl.h>

int main(){

    int pipe;
    char *sharedPipe = "MYFIFO";

    int lifeTime = (int)(getRandExponential() * 5.0);

    sleep(lifeTime);        // simulate adjustment of life support
    int envTime = (int)(getRandExponential() * 4.0);

    sleep(envTime);         // simulate adjustment of environment

    char buffer[80];

    snprintf(buffer, sizeof(buffer), "Breathing gas levels adjusted (%d sec.). Environment adjusted (%d sec.).", lifeTime, envTime);

    pipe = open(sharedPipe, O_WRONLY);  
    if(pipe < 0){
        perror("open");
        exit(2);
    }

    pipe = write(pipe, buffer, strlen(buffer) + 1);
    close(pipe);

}

Чтобы повторить, в идеале я хочу выполнить только родитель ("мост"), а затем выполняет дочерний ("lifeSupport"), который пишет в канал и завершает работу, так что родитель может затем прочитать из канала и отобразить результат, Пожалуйста, дайте мне знать, если я могу что-нибудь прояснить. Я ценю любую помощь!

0 ответов

Другие вопросы по тегам