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