- RE: Как читать из файла в фоновом режиме ?, Андрей, 15:51 , 25-Мрт-02 (1)
Есть мнение, что это таки должны быть pthread. Посему, не снимая первого вопроса, еще два:1. Кто-нибудь использовал это (pthread) ? Оно по-прежнему not-recommended или уже сделали нормальную реализацию (ядро 2.2.х)? 2. Если использовать pthread, то это должно выглядеть примерно так: вызывающая прога: - сбросить флажок "фю" - pthread_create (.., *функция нити, ...) ... - если флажок "фю" установлен, то считано функция нити: - считали что нужно - выставили флажок "фю" - pthread_exit (...) Или я чего-то главного недопонимаю ?
P.S. А может, __clone надо использовать ? :)
>Привет всем :) > >gcc version 2.96 20000731 (Red Hat >Linux 7.0). Без иксов. > >Как можно (и можно ли:) организовать >чтение из файла в фоновом >режиме ? > >То есть: обычный режим - это >когда сказал fread (или там >fscanf) и оно пока не >прочитает, управления не отдаст. >Зато уж если отдала - значит >точно прочитала (или ошибка:). > >А вот чтобы сказал "считать столько-то >туда-то", оно сразу вернуло управление >и начало в фоне >читать. >А программа в это время пошла >другие дела делать. >Дочитало, заполнило буфер - взвело флажок/квиток >готовности. > >Так бывает ? Может, библиотека такая >есть ? :) > >Заранее спасибо. > > >P.S. MPI-2 не предлагать :))
- RE: Как читать из файла в фоновом режиме ?, Soldier, 18:51 , 25-Мрт-02 (2)
>Есть мнение, что это таки должны >быть pthread. >Посему, не снимая первого вопроса, еще >два: > >1. Кто-нибудь использовал это (pthread) ? >Оно по-прежнему not-recommended или уже >сделали нормальную реализацию (ядро 2.2.х)? > > >2. Если использовать pthread, то это >должно выглядеть примерно так: > >вызывающая прога: > - сбросить флажок "фю" > - pthread_create (.., *функция нити, >...) > ... > - если флажок "фю" установлен, >то считано > >функция нити: > - считали что нужно > - выставили флажок "фю" > - pthread_exit (...) > > >Или я чего-то главного недопонимаю ? > > > >P.S. А может, __clone надо использовать >? :) > >Sm. http://centaurus.cs.umass.edu/~wagner/threads_html/tutorial....
- RE: Как читать из файла в фоновом режиме ?, Z0termaNN, 13:14 , 28-Мрт-02 (3)
прям как в vms. на самом деле есть целых 4 приема это сделать: 1. pthreads 2. signal driven IO 3. async io ( aio_* functions) 4. сделать несколько процессов и общаться через ipc.
- RE: Как читать из файла в фоновом режиме ?, Андрей, 13:26 , 28-Мрт-02 (4)
Ага, спасибо всем. Ссылка про нитки полезная :)) >3. async io ( aio_* functions)
А по поводу п.3 маны какие-нибудь бывают ? :) Или хоть так, на пальцах ? Андрей
- RE: Как читать из файла в фоновом режиме ?, Арлекин, 13:52 , 28-Мрт-02 (5)
Попробуй так: $ls -l /usr/share/man/man*/*aio* Получишь целый выводок, если они установлены.
- RE: Как читать из файла в фоновом режиме ?, Андрей, 14:07 , 28-Мрт-02 (6)
>Попробуй так: >$ls -l /usr/share/man/man*/*aio* >Получишь целый выводок, если они установлены. >apropos aio я сразу попробовал :) увы ls: /usr/share/man/man*/*aio*: No such file or directory А вот что нашлось: /usr/include/aio.h /usr/src/linux-2.2.16/drivers/scsi/aacraid/include/fsaioctl.h /usr/i386-glibc21-linux/include/aio.h Это значит, что оно не установлено ? Или просто манов нет нужных ? Linux RedHat 7.0 Guinnes, kernel 2.2.16-22
- RE: Как читать из файла в фоновом режиме ?, Арлекин, 14:14 , 28-Мрт-02 (7)
Маны могут быть и в /usr/local/share и еще чер-те где. Может $MANPATH на них не указывает. Ищи find / -name *aio* -print так по-моему. Если где найдутся сделаешь export MANPATH=$MANPATH:<где нашел> и всё будет видно.
- RE: Как читать из файла в фоновом режиме ?, Андрей, 15:32 , 28-Мрт-02 (8)
>Маны могут быть и в /usr/local/share >и еще чер-те где. Может >$MANPATH на них не указывает. >Ищи >find / -name *aio* -print Это я тоже делал. Именно так и нашлись те три файла, которые я написал. Ладно, маны-то я нашел в интернете: http://ace.florin.ru/doc/susv2/xshix.html Вопрос в другом - как эту библиотеку поставить ? Скачал libaio-0.3.8.tar.gz, собрал, поставил. Появились в ./usr/lib файлы libaio.so, libaio.a... Линкер стал понимать ключ -laio, но: seqw1.o(.text+0x48): undefined reference to `aio_read' collect2: ld returned 1 exit status Похоже, что это (libaio) просто интерфейс к настоящему aio... как же его, настоящего, поставить ?
Кто что может посоветовать ? :)
- RE: Как читать из файла в фоновом режиме ?, XMan, 15:49 , 28-Мрт-02 (9)
А что-то типа:gcc -laio ... не помогает ?
- RE: Как читать из файла в фоновом режиме ?, Андрей, 15:53 , 28-Мрт-02 (11)
>А что-то типа: > >gcc -laio ... > >не помогает ? файлов libaio.* в системе нет. Соответственно -laio говорит "не могу найти". Описание попытки поставить либы - в моем предыдущем постинге.
- RE: Как читать из файла в фоновом режиме ?, Арлекин, 15:52 , 28-Мрт-02 (10)
Короче. На соляре этот пример #include <aio.h> main() { struct aiocb s; int k = aio_read(&s); } странслировался и собрался такой командой $CC aiotest.cc -o aiotest -lposix4 БЕЗ ВОПРОСОВ. Все у тебя есть. Делай маленькие примерчики - как разберешься все пойдет. А какой командой собирать написано в первых строчках мана. Успехов.
- RE: Я ща видел те маны., Арлекин, 16:01 , 28-Мрт-02 (12)
Если в линухе ВСЕ маны ТАК пишут, я вам ребята не завидую. Соляркин ман такой: Realtime Library aio_read(3R)NAME aio_read, aio_write - asynchronous read and write operations SYNOPSIS cc [ flag ... ] file ... -lposix4 [ library ... ] #include <aio.h> int aio_read(struct aiocb *aiocbp); int aio_write(struct aiocb *aiocbp); struct aiocb { int aio_fildes; /* file descriptor */ volatile void *aio_buf; /* buffer location */ size_t aio_nbytes; /* length of transfer */ off_t aio_offset; /* file offset */ int aio_reqprio; /* request priority offset */ struct sigevent aio_sigevent; /* signal number and offset */ int aio_lio_opcode; /* listio operation */ }; struct sigevent { int sigev_notify; /* notification mode */ int sigev_signo; /* signal number */ union sigval sigev_value; /* signal value */ }; union sigval { int sival_int; /* integer value */ void *sival_ptr; /* pointer value */ }; DESCRIPTION ну и так далее. Попробуй с поЗиксовым ключом.
- RE: Я ща видел те маны., Андрей, 16:51 , 28-Мрт-02 (13)
> >ну и так далее. Попробуй с >поЗиксовым ключом. неа :) Посмотрел в FreeBSD4.4. Маны есть, слово aio_read обнаружилось в /usr/lib/libc.a Я прогрепал весь /usr/lib - и нашел таки. /usr/lib/librt.a Соответственно ключ -lrt - и все собралось. Спасибо за помощь.
- RE: Я ща видел те маны., Андрей, 16:53 , 28-Мрт-02 (14)
>> >>ну и так далее. Попробуй с >>поЗиксовым ключом. > >неа :) > >Посмотрел в FreeBSD4.4. Маны есть, слово >aio_read обнаружилось в /usr/lib/libc.a То есть вот это, ниже - это про мой линукс, не про фрю :) /usr/lib/librt.a Соответственно ключ -lrt
|