2016-10-11 3 views
1

Как совместно использовать данные (структуру) между двумя независимыми процессами (без вилки). То, что я хочу сделать, это в основном что-то вроде этого:Обмен данными между двумя процессами с индексом в C

process1: 

Server(PID-399341): Waiting for input.... 

затем в другом терминале

process2: 

Enter server process: 

399341 

Enter a string: 

Hello 

наконец

process1: 

"Hello" has been entered. 

Система QNX/POSIX. Какие у меня варианты?

Спасибо!

+1

TCP/IP? Или напишите в файл? –

+0

Общий сегмент памяти? –

+0

FIFO? Очередь сообщений? Пользовательское устройство? Вики? Другой HTTP-сервис? Sneakernet? –

ответ

1

Его можно легко достичь, используя именованный канал (FIFO). Просто выберите имя FIFO так же, как ваш PID. Вот рабочий код для сервера и клиента.

server.c

int fd; 
    char buf[10], rdbuf[50]; 

    sprintf(buf,"%d",getpid()); 

    if(mkfifo(buf,0660) == -1) 
      perror("mkfifo"); 

    printf("Server(PID-%d): Waiting for input..\n",getpid()); 

    fd = open(buf,O_RDONLY); 

    read(fd, rdbuf, 50); 

    printf("%s has been entered\n",rdbuf); 

    close(fd); 

    return 0; 

client.c

int fd; 
    char wrbuf[50], buf[10]; 

    printf("Enter server process: "); 
    scanf("%s",buf); 
    getchar(); 

    fd = open(buf,O_WRONLY); 

    printf("Enter message\n"); 

    gets(wrbuf); 

    write(fd, wrbuf, strlen(wrbuf)+1); 

Я думаю, что то же самое можно сделать с помощью очереди сообщений и сегмент разделяемой ими памятью, сделав ключевое значение же, как PID. Но я не уверен.

+0

Привет, спасибо. Всегда приятно видеть простые примеры. Итак, как сервер знает, что буфер был изменен? Я планирую использовать это в бесконечном цикле, где клиент продолжает кормить сообщения сервера. – Senri

+0

В этом примере сервер всегда будет читать 50 символов. Если там есть нулевой символ, printf только печатает это так много. Таким образом, буфер всегда очищается сервером, а затем он ждет другого сообщения, это заботится о вашей ОС. Чтобы быть в безопасности, поместите все нулевые символы в буфер, прежде чем писать на него. –

Смежные вопросы