- Ожидание записи в файл другим процессом, Pahanivo, 09:56 , 26-Янв-10 (1)
>[оверквотинг удален] >файл много раз в цикле. > open FILE, "<$FILE"; > while ( sleep 1 ) { > while ( $fromparent=<FILE>) { > print $client "$fromparent\x1B[0;32m"; > } > } >"sleep 1" очень замедляет реакцию программы. >Если "sleep" убрать, то процессор грузится на 100%, а это не приемлемо. >1) перенаправить вывод программы не в файл, а на stdin твоего скрипта (или воспользоваться tee) 2) ммм скаежм tail снимать конец файла и ловить на stdin tail -n 0 -f file > you_script (както так) но встает бааальшой вопрос - как завершить прогу?
- Ожидание записи в файл другим процессом, D_Pavel, 10:10 , 26-Янв-10 (2) +1
>1) перенаправить вывод программы не в файл, а на stdin твоего скрипта Боюсь так не получится, потому что из этого файла должны читать несколько скриптов не мешая друг другу, на stdin можно перенаправить только для одного. >2) ммм скаежм tail снимать конец файла и ловить на stdin > tail -n 0 -f file > you_script (както так) Не понял, что это и как работает? tail будет ожидать вывода в файл? Я думал он просто считывает хвост файла. Нужно считывать из файла без повторов и без дублей. > но встает бааальшой вопрос - как завершить прогу? kill перестанет работать? Снова не понял что вы имеете в виду.
- Ожидание записи в файл другим процессом, Pahanivo, 13:09 , 26-Янв-10 (4)
tail -n 0 -f you_file | you_script_1 & tail -n 0 -f you_file | you_script_2 & tail -n 0 -f you_file | you_script_3 & ...>Не понял, что это и как работает? tail будет ожидать вывода в >файл? Я думал он просто считывает хвост файла. Нужно считывать из >файла без повторов и без дублей. man tail >> но встает бааальшой вопрос - как завершить прогу? >kill перестанет работать? Снова не понял что вы имеете в виду. в том то и дело для тейлы быдут висеть пока не получаль сигнал
- Ожидание записи в файл другим процессом, D_Pavel, 13:28 , 26-Янв-10 (5) +1
>man tailСпасибо, это дало лучший результат чем yandex tail! >в том то и дело для тейлы быдут висеть пока не получаль >сигнал Предполагалось что программа будет завершаться по команде "здохни", записанной в файл. Теоретически тэйл нормально должен отработать, так? И нельзя ли на перле реализовать тот механизм, который делает внешняя программа тэйл? Большие требования к оптимизации использования памяти, количества запущенных процессов и использования процессорного времени...
- Ожидание записи в файл другим процессом, Pahanivo, 17:57 , 26-Янв-10 (6)
> Большие требования к оптимизации > использования памяти, количества запущенных процессов и использования процессорного > времени... тыб лучши изложил задачу с самого начала, а то есть очень сильные подозрения что ты херней страдаешь и роешь не в ту сторону ...
- Ожидание записи в файл другим процессом, D_Pavel, 06:12 , 27-Янв-10 (9) +1
>тыб лучши изложил задачу с самого начала, а то есть очень сильные >подозрения что ты херней страдаешь и роешь не в ту сторону >... Сервер слушает сокет и принимает клиентов, любой клиент посылают данные серверу, сервер эти же данные дублирует всем клиентам, в итоге происходит обмен данными между клиентами.
- Ожидание записи в файл другим процессом, Pahanivo, 07:58 , 27-Янв-10 (11) +1
>>тыб лучши изложил задачу с самого начала, а то есть очень сильные >>подозрения что ты херней страдаешь и роешь не в ту сторону >>... > >Сервер слушает сокет и принимает клиентов, любой клиент посылают данные серверу, сервер >эти же данные дублирует всем клиентам, в итоге происходит обмен данными >между клиентами. эээээ ... а причем тут файл ))
- Ожидание записи в файл другим процессом, D_Pavel, 08:04 , 27-Янв-10 (12) +1
>>>тыб лучши изложил задачу с самого начала, а то есть очень сильные >>>подозрения что ты херней страдаешь и роешь не в ту сторону >>>... >> >>Сервер слушает сокет и принимает клиентов, любой клиент посылают данные серверу, сервер >>эти же данные дублирует всем клиентам, в итоге происходит обмен данными >>между клиентами. > >эээээ ... а причем тут файл )) Ты просил изложить с самого начала :) Для обслуживания каждого подключившегося клиента ответвляется дочерний сервер. >>сервер эти же данные дублирует всем клиентам, В этом месте и используется файл. главный сервер записывает данные в файл, из которого потом дочерние серверы считывают эти данные и отправляют куда надо.
- Ожидание записи в файл другим процессом, Pahanivo, 08:46 , 27-Янв-10 (14) +1
>[оверквотинг удален] >> >>эээээ ... а причем тут файл )) > >Ты просил изложить с самого начала :) >Для обслуживания каждого подключившегося клиента ответвляется дочерний сервер. >>>сервер эти же данные дублирует всем клиентам, > >В этом месте и используется файл. главный сервер записывает данные в файл, >из которого потом дочерние серверы считывают эти данные и отправляют куда >надо. ээээ аааа кагбыыыыы нельзя это делать например через сокет ? :))
- Ожидание записи в файл другим процессом, D_Pavel, 09:17 , 27-Янв-10 (15) +1
Через сокет сообщение получит только один процесс, который последним использовал этот сокет. :р
- Ожидание записи в файл другим процессом, Pahanivo, 10:19 , 27-Янв-10 (16)
>Через сокет сообщение получит только один процесс, который последним использовал этот сокет. >:р x_X - по моему ты бредишь ....... "локальный unix-сокет" тебе о чемнидь говорит?
- Ожидание записи в файл другим процессом, D_Pavel, 10:40 , 27-Янв-10 (17)
>x_X - по моему ты бредишь ....... >"локальный unix-сокет" тебе о чемнидь говорит? ммм..... да. Это ничего не меняет. Если думаешь что я не прав, пиши прямо, лучше с примером.
- Ожидание записи в файл другим процессом, Pahanivo, 12:20 , 27-Янв-10 (18)
>>x_X - по моему ты бредишь ....... >>"локальный unix-сокет" тебе о чемнидь говорит? > >ммм..... да. Это ничего не меняет. Если думаешь что я не прав, >пиши прямо, лучше с примером. mysql.sock как пример ) локальные клиенты могут ходить через него ))
- Ожидание записи в файл другим процессом, D_Pavel, 12:30 , 27-Янв-10 (19)
>mysql.sock как пример ) >локальные клиенты могут ходить через него )) Это вроде какой-то файл? Так ничего не понятно. Как передать данные сразу нескольким процессам?
- Ожидание записи в файл другим процессом, Pahanivo, 09:38 , 28-Янв-10 (20)
>>mysql.sock как пример ) >>локальные клиенты могут ходить через него )) > >Это вроде какой-то файл? Так ничего не понятно. Как передать данные сразу >нескольким процессам? да это файл!!! но спец типа, который по идее какбы не файл ... это называется локальный сокет!
- Ожидание записи в файл другим процессом, D_Pavel, 11:59 , 29-Янв-10 (21)
>>>mysql.sock как пример ) >>>локальные клиенты могут ходить через него )) >> >>Это вроде какой-то файл? Так ничего не понятно. Как передать данные сразу >>нескольким процессам? > >да это файл!!! но спец типа, который по идее какбы не файл >... >это называется локальный сокет! Если это работает так же как именоваванный канал, то не получилось, я так уже пробовал. Если это другое, покажи как его создать и использовать?
- Ожидание записи в файл другим процессом, Andrey, 11:31 , 26-Янв-10 (3) +1
>[оверквотинг удален] >файл много раз в цикле. > open FILE, "<$FILE"; > while ( sleep 1 ) { > while ( $fromparent=<FILE>) { > print $client "$fromparent\x1B[0;32m"; > } > } >"sleep 1" очень замедляет реакцию программы. >Если "sleep" убрать, то процессор грузится на 100%, а это не приемлемо. >может быть inotify или dnotify (я не помню кто из них кого заменил) вам поможет.
- Ожидание записи в файл другим процессом, D_Pavel, 08:17 , 27-Янв-10 (13) +2
>может быть inotify или dnotify (я не помню кто из них кого >заменил) вам поможет. Спасибо! Возможно так и есть, почитаю.
- Ожидание записи в файл другим процессом, Аноним, 22:05 , 26-Янв-10 (7) +1
>[оверквотинг удален] >файл много раз в цикле. > open FILE, "<$FILE"; > while ( sleep 1 ) { > while ( $fromparent=<FILE>) { > print $client "$fromparent\x1B[0;32m"; > } > } >"sleep 1" очень замедляет реакцию программы. >Если "sleep" убрать, то процессор грузится на 100%, а это не приемлемо. >Можешь использовать Multiplexed I/O, т.е. select, poll, epoll, kqueue... Вот пример из книги Роберта Лава с select (вместо STDIN_FILENO может быть любой другой файловый дескриптор): #include <stdio.h> #include <sys/time.h> #include <sys/types.h> #include <unistd.h> #define TIMEOUT 5 /* select timeout in seconds */ #define BUF_LEN 1024 /* read buffer in bytes */ int main (void) { struct timeval tv; fd_set readfds; int ret; /* Wait on stdin for input. */ FD_ZERO(&readfds); FD_SET(STDIN_FILENO, &readfds); /* Wait up to five seconds. */ tv.tv_sec = TIMEOUT; tv.tv_usec = 0; /* All right, now block! */ ret = select (STDIN_FILENO + 1, &readfds, NULL, NULL, &tv); if (ret == -1) { perror ("select"); return 1; } else if (!ret) { printf ("%d seconds elapsed.\n", TIMEOUT); return 0; } /* * Is our file descriptor ready to read? * (It must be, as it was the only fd that * we provided and the call returned * nonzero, but we will humor ourselves.) */ if (FD_ISSET(STDIN_FILENO, &readfds)) { char buf[BUF_LEN+1]; int len; /* guaranteed to not block */ len = read (STDIN_FILENO, buf, BUF_LEN); if (len == -1) { perror ("read"); return 1; } if (len) { buf[len] = '\0'; printf ("read: %s\n", buf); } return 0; } fprintf (stderr, "This should not happen!\n"); return 1; }
- Ожидание записи в файл другим процессом, Аноним, 22:08 , 26-Янв-10 (8) +1
Блин, извиняюсь, я только прочитал текст твоего сообщения, а на код не посмотрел, почему-то был уверен что это C.
- Ожидание записи в файл другим процессом, D_Pavel, 06:29 , 27-Янв-10 (10) +1
>Блин, извиняюсь, я только прочитал текст твоего сообщения, а на код не >посмотрел, почему-то был уверен что это C. Ничего страшного. Может быть это как раз то что нужно, сейчас читаю про Multiplexing filehandles with select() in perl.
|