Доброго времени суток.
Есть ли какие нибудь способы передачи данных в программу, во время её исполнения.
Сейчас исползую локальный сокет PF_LOCAL, а есть другие способы.
>Доброго времени суток.
>Есть ли какие нибудь способы передачи данных в программу, во время её
>исполнения.
>Сейчас исползую локальный сокет PF_LOCAL, а есть другие способы.есть еще FIFO, работа через обшедоступный сегмент памяти
и через файл записаный в память.
>Доброго времени суток.
>Есть ли какие нибудь способы передачи данных в программу, во время её
>исполнения.
>Сейчас исползую локальный сокет PF_LOCAL, а есть другие способы.Читайте классику:
Cтивенс У. Р. "UNIX: взаимодействие процессов"В современных ОС есть дополнительные способы, не описанные в данной книге, например, передача сообщений. Все зависит от решаемых задач и условий выполнения процессов.
Сделал всё через 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;
}
> while(1)
> {
> if(read(fp, &buf, sizeof(buf)) !=
>-1)
>
>printf("BUF: %s\n", buf);
> }Вот из-за этого printf и Stopped.