URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5926
[ Назад ]

Исходное сообщение
"Передача данных в запущенную программу"

Отправлено Fagot , 16-Ноя-06 22:07 
Доброго времени суток.
Есть ли какие нибудь способы передачи данных в программу, во время её исполнения.
Сейчас исползую локальный сокет PF_LOCAL, а есть другие способы.

Содержание

Сообщения в этом обсуждении
"Передача данных в запущенную программу"
Отправлено f00l , 17-Ноя-06 06:47 
>Доброго времени суток.
>Есть ли какие нибудь способы передачи данных в программу, во время её
>исполнения.
>Сейчас исползую локальный сокет PF_LOCAL, а есть другие способы.

есть еще FIFO, работа через обшедоступный сегмент памяти
  и через файл записаный в память.


"Передача данных в запущенную программу"
Отправлено Boris Polevoy , 17-Ноя-06 10:08 
>Доброго времени суток.
>Есть ли какие нибудь способы передачи данных в программу, во время её
>исполнения.
>Сейчас исползую локальный сокет PF_LOCAL, а есть другие способы.

Читайте классику:
Cтивенс У. Р. "UNIX: взаимодействие процессов"

В современных ОС есть дополнительные способы, не описанные в данной книге, например, передача сообщений. Все зависит от решаемых задач и условий выполнения процессов.


"Передача данных в запущенную программу"
Отправлено Fagot , 18-Ноя-06 11:32 
Сделал всё через fifo. Возникла проблема, когда передаю данные в программу,то программы останавливается. Вываливается сообщение [1]+ Stopped. Это если запустить сервер так: ./server &
А если запустить в разных терминалах то всё без проблем работать будет.

Вот программа принимающая сообщение (server):
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>

#define my_fifo "/tmp/test.fifo"

int main()
{
    char buf[128];
    umask(0);
    mknod(my_fifo, S_IFIFO | 0666, 0);
    int fp = open(my_fifo, O_RDWR);
    while(1)
    {
        if(read(fp, &buf, sizeof(buf)) != -1)
            printf("BUF: %s\n", buf);
    }
    close(fp);
    return 0;
}

Программа передающая сообщение:
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>

#define my_fifo "/tmp/test.fifo"

int main(int argc, char **argv)
{
    int fp = open(my_fifo, O_RDWR);
    char *buff = "Hello, world!";
    write(fp, &buff, strlen(buff));
    close(fp);
    return 0;
}


"Передача данных в запущенную программу"
Отправлено gyn61 , 18-Ноя-06 15:48 
>    while(1)
>    {
>        if(read(fp, &buf, sizeof(buf)) !=
>-1)
>            
>printf("BUF: %s\n", buf);
>    }

Вот из-за этого printf и Stopped.