Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 17.02.2019
Сообщений: 2

Си на Linux. Создание процесса демона

14.12.2019, 02:23. Показов 1568. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В данном задании нужно организовать взаимодействие независимых процессов с помощью именуемого канала. Процесс-клиент считывает с клавиатуры имя файла, отправляет его процесса-сервера через неименованного канал. Процесс сервер выполняет запрос, обусловлен вариантом, и передает результат запроса через другой канал процесса-клиента. Если запрос выполнить не удалось, процесса клиенту передается сообщение об ошибке. После этого процесс-сервер ожидает запрос от другого клиента. Процесс клиент отправляет результат запроса в стандартный файл вывода.
Формат запроса и способ именования каналов определить самостоятельно
Мое задание: Процесс клиент спрашивает, есть ли заданный файл каталогом.
Пример программы
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include<stdio.h>
#include<sys/wait.h>
#include<unistd.h>
#include<sys/stat.h>
#include<stdlib.h>
#include<fcntl.h>
#define fsizen 14
 
int main(int argc, char* argv[])
{
    int fd[2], fif, rdes;
    int resnum;
    pid_t pid;
    if(pipe(fd) < 0)
{
    printf("Eror pipe\n");
    exit(6);
}
    if((pid = fork()) < 0){
printf("Eror fork: \n");
exit(2);
    }else if(pid > 0)
    {
        printf("pid = %d \n", pid);
 
close(fd[1]);
printf("close fd[1]\n");
char name[100];
if((rdes = read(fd[0], name, 100)) == -1)
{
    printf("eror read name\n");
}
else
    printf("Read file %s\n", name);
}
    FILE *infile;
    char *namefile;
    char inbuf[100];
    namefile = name;
    infile = fopen(namefile, "r");
    if(infile == NULL)
    {
         printf("Error open file\n");
         exit(-2);
    }
    int sizefile = fseek(infile, 0, SEEK_END);
    sizefile = ftell(infile);
    printf("sizefile = %d \n", sizefile);
    fseek(infile, 0, SEEK_SET);
    if(fread(inbuf, sizeof(char), sizefile, infile)!= sizefile)
    {
        fclose(infile);
        printf("Файл пустой\n");
        exit(-3);
    }
    int i, result;
    for( i = 0; i < sizefile; i++)
    {
        if( inbuf[i] == 0x0A)
            result++;
    }
        if((fif = open("fifo", O_WRONLY)) == -1)
    {
printf("Eror open chanel fifo");
exit(1);
    }
    size_t wr;
    int b[1];
    b[0] = result;
if((wr = write(fif, b, 100)) == -1)
{
    printf("Eror write into fifo-chanel\n");
}
pid = wait(0);
    }
    else
    {
        if((fif = open("fifo", O_RDONLY)) == -1)
    {
printf("Eror open chanel fifo");
exit(1);
    }
ssize_t w, r;
printf("Close fd[0]\n");
close(fd[0]);
 
if((w = write(fd[1], argv[1], fsizen)) == -1)
{
    printf("Eror write info in fd[1]\n");
}
int a[1];
 
if((r = read(fif, a, fsizen)) == -1)
{
    printf("Eror read fifo-chanel\n");
}
printf("Number of strings in %s: %d\n", argv[1], a[0] + 1);
    }
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.12.2019, 02:23
Ответы с готовыми решениями:

два процесса после старта демона
после запуска демона с кодом вида static void sig_handler(int sig) { thread.destroy(); } int main(int argc, char* argv) ...

Общение веб-интерфейса и демона в linux
Решил немного похелловорлдить в linux . Делаю простого демона который управляется с помощью веб-интерфейса . Сначала планировал...

Есть ли у кого опыт по написанию демона по linux
Есть ли у кого опыт по написанию демона? Моя задача в том что бы написать демона(deamon), или консольное background приложение под...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.12.2019, 02:23
Помогаю со студенческими работами здесь

Написать программу, которая будет превращать себя в демона Linux
Привет. Может у кого есть пример кода?

Создание демона =)
Нужно написать приложение, которое при запуске себя &quot;демонизирует&quot; и остается в памяти. Перед закрытием стандартного потока вывода stdout...

Создание демона в OS Ubuntu
Начал писать код для программы, в которой создается новый процесс(он должен стать демоном), родительский должен завершиться, то есть в...

Рождение процесса в Linux
Здравствуйте! Некоторое время назад я начал изучать С++ и параллельно заинтересовался юникс-подобными системами. Люблю изучать всё новое....

Создание Linux на основе ядра Linux (kernel.org)
Доброго времени суток! Можете подсказать как на основе ядра Linux (kernel.org) создать свою сборку. Я еще никогда не делал ОС'ей , и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru