Вопрос задан 28.02.2021 в 19:26. Предмет Информатика. Спрашивает Халайджи Виталий.

90Б. Помогите разработать две простых программы на языке С под Linux: 1.Составьте UNIX программу

на языке С, порождающую дочерний процесс и получающую от него данные по именованному каналу. 2.Составьте UNIX-программу на языке С, запускающую в качестве дочернего процесса другую программу и переназначающую ее стандартный вывод на вывод в файл.
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Гуров Артем.
1 задание, пробуйте
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
const int size = 100;  

int main()
{
     int fd[2];
     char inf_to_send[size];
     scanf("%s", inf_to_send);
     pid_t p = fork();
     pipe(fd);
     if (p > 0) {
         close(fd[0]);
         write(fd[1], inf_to_send, size);
         printf("Parent(%d) send str: %s\n", getpid(), inf_to_send);
         close(fd[1]);
     } else {
         close(fd[1]);
         read(fd[0], inf_to_send, size);
         printf("Child(%d) received str: %s\n", getpid(), inf_to_send);
         close(fd[0]);
     }
}
0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Конечно, я могу помочь вам с этими программами на языке C под Linux. Ниже приведены примеры кода для обеих программ.

Программа 1: Передача данных между родительским и дочерним процессом через именованный канал

c
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #define FIFO_NAME "/tmp/myfifo" #define BUFFER_SIZE 1024 int main() { int fd; pid_t pid; char buffer[BUFFER_SIZE]; // Создание именованного канала mkfifo(FIFO_NAME, 0666); // Создание дочернего процесса pid = fork(); if (pid < 0) { fprintf(stderr, "Ошибка при создании процесса\n"); return 1; } if (pid == 0) { // Дочерний процесс // Открытие именованного канала для чтения fd = open(FIFO_NAME, O_RDONLY); // Чтение данных из канала read(fd, buffer, BUFFER_SIZE); printf("Дочерний процесс получил данные: %s\n", buffer); // Закрытие канала и завершение работы close(fd); exit(0); } else { // Родительский процесс // Открытие именованного канала для записи fd = open(FIFO_NAME, O_WRONLY); // Запись данных в канал sprintf(buffer, "Привет, дочерний процесс!"); write(fd, buffer, BUFFER_SIZE); // Закрытие канала и ожидание завершения дочернего процесса close(fd); wait(NULL); // Удаление именованного канала unlink(FIFO_NAME); } return 0; }

Программа 2: Перенаправление стандартного вывода дочернего процесса в файл

c
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int main() { pid_t pid; // Создание дочернего процесса pid = fork(); if (pid < 0) { fprintf(stderr, "Ошибка при создании процесса\n"); return 1; } if (pid == 0) { // Дочерний процесс // Открытие файла для записи (стандартный вывод будет перенаправлен в этот файл) int fd = open("output.txt", O_WRONLY | O_CREAT, 0644); // Перенаправление стандартного вывода в файловый дескриптор dup2(fd, STDOUT_FILENO); // Запуск другой программы с помощью функции exec execl("/bin/ls", "ls", "-l", NULL); // В случа
0 0

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос