Как реализовать обмен сообщениями между программами, где текст сообщения берется из txt-документа?

Нужно реализовать программу, где программа A будет передавать каждый n-ый символ текстового файла f программе B, пока символы не закончатся. После чего программа B должна принять сообщение end, означающее остановку работы программы.
f и n вводит пользователь в виде аргументов при запуске программы.
#include <unistd.h>
#include <errno.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
 
int main (int argc, char **argv) { 
    int n, ch;
    FILE *f[5];
 
    if (argc < 3 || argc > 7) {
      puts("Error.");
      return 1;
    }
 
    if (strcmp(argv[1], "-a") != 0 && 
        strcmp(argv[1], "-b") != 0) {
 
      puts("Первый параметр -a или -b");
      return 2;
    }
 
    for (n=0; n < argc-2; n++){
      f[n] = fopen(argv[n+2], argv[1]+1);
      if (f[n] == NULL) {
        printf("Error for file: %s \n", 
                argv[n+2]);
        return 3;
      }
    }
 
    while ((ch = getchar()) != EOF)
        for (n=0; n < argc-2; n++)
            putc(ch,f[n]);
 
    for (n=0; n < argc-2; n++)
        fclose(f[n]);
 
    return 0;
}
  • Вопрос задан
  • 54 просмотра
Решения вопроса 1
@res2001
Developer, ex-admin
Если одна из программ потомок другой - используйте неименованные каналы.
Если обе программы работают не зависимо друг от друга (не предок и потомок) используйте именованные каналы или unix socket (если платформа никсы).
Если программы должны работать на разных компах (могут работать и на одном при этом) используйте сокеты.

Вообще самым быстрым средством межпроцессного взаимодействия является shared memory. Но у нее недостаток в том, что должен быть дополнительный механизм с помощью которого второму процессу можно будет сообщить, что данные обновлены (либо второй процесс должен в цикле постоянно мониторить состояние памяти, а это часто не приемлемо). shared memory есть смысл использовать, когда надо передать большой объем информации и в паре с ним использовать каналы или сигналы (unix).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Или через Pipe или через сокеты. Что там у вас в курсе проходили, через то и делайте.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы