
Вопрос задан 28.02.2021 в 19:26.
Предмет Информатика.
Спрашивает Халайджи Виталий.
90Б. Помогите разработать две простых программы на языке С под Linux: 1.Составьте UNIX программу
на языке С, порождающую дочерний процесс и получающую от него данные по именованному каналу. 2.Составьте UNIX-программу на языке С, запускающую в качестве дочернего процесса другую программу и переназначающую ее стандартный вывод на вывод в файл.

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

Отвечает Гуров Артем.
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]);
}
}
#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]);
}
}



Отвечает нейросеть 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);
// В случа


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

Информатика 47

Информатика 33

Информатика 67

Информатика 18

Информатика 25

Информатика 563

Информатика 16
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili