The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Как читать из файла в фоновом режиме ?"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Как читать из файла в фоновом режиме ?"
Сообщение от Андрей emailИскать по авторуВ закладки on 25-Мрт-02, 12:02  (MSK)
Привет всем :)

gcc version 2.96 20000731 (Red Hat Linux 7.0). Без иксов.

Как можно (и можно ли:) организовать чтение из файла в фоновом режиме ?

То есть: обычный режим - это когда сказал fread (или там fscanf) и оно пока не прочитает, управления не отдаст.
Зато уж если отдала - значит точно прочитала (или ошибка:).

А вот чтобы сказал "считать столько-то туда-то", оно сразу вернуло управление и начало в фоне  читать.
А программа в это время пошла другие дела делать.
Дочитало, заполнило буфер - взвело флажок/квиток готовности.

Так бывает ? Может, библиотека такая есть ? :)

Заранее спасибо.


P.S. MPI-2 не предлагать :))

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "RE: Как читать из файла в фоновом режиме ?"
Сообщение от Андрей emailИскать по авторуВ закладки on 25-Мрт-02, 15:51  (MSK)
Есть мнение, что это таки должны быть 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 не предлагать :))


  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "RE: Как читать из файла в фоновом режиме ?"
Сообщение от Soldier Искать по авторуВ закладки on 25-Мрт-02, 18:51  (MSK)
>Есть мнение, что это таки должны
>быть 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.html

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "RE: Как читать из файла в фоновом режиме ?"
Сообщение от Z0termaNN emailИскать по авторуВ закладки on 28-Мрт-02, 13:14  (MSK)
прям как в vms.
на самом деле есть целых 4 приема это сделать:
1. pthreads
2. signal driven IO
3. async io ( aio_* functions)
4. сделать несколько процессов и общаться через ipc.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "RE: Как читать из файла в фоновом режиме ?"
Сообщение от Андрей emailИскать по авторуВ закладки on 28-Мрт-02, 13:26  (MSK)
Ага, спасибо всем. Ссылка про нитки полезная :))


>3. async io ( aio_* functions)

А по поводу п.3 маны какие-нибудь бывают ? :) Или хоть так, на пальцах ?

Андрей

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "RE: Как читать из файла в фоновом режиме ?"
Сообщение от Арлекин Искать по авторуВ закладки on 28-Мрт-02, 13:52  (MSK)
Попробуй так:
$ls -l /usr/share/man/man*/*aio*
Получишь целый выводок, если они установлены.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "RE: Как читать из файла в фоновом режиме ?"
Сообщение от Андрей emailИскать по авторуВ закладки on 28-Мрт-02, 14:07  (MSK)
>Попробуй так:
>$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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "RE: Как читать из файла в фоновом режиме ?"
Сообщение от Арлекин Искать по авторуВ закладки on 28-Мрт-02, 14:14  (MSK)
Маны могут быть и в /usr/local/share и еще чер-те где. Может $MANPATH на них не указывает. Ищи
find / -name *aio* -print
так по-моему. Если где найдутся сделаешь
export MANPATH=$MANPATH:<где нашел>
и всё будет видно.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "RE: Как читать из файла в фоновом режиме ?"
Сообщение от Андрей emailИскать по авторуВ закладки on 28-Мрт-02, 15:32  (MSK)
>Маны могут быть и в /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... как же его, настоящего, поставить ?

Кто что может посоветовать ? :)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "RE: Как читать из файла в фоновом режиме ?"
Сообщение от XMan emailИскать по авторуВ закладки on 28-Мрт-02, 15:49  (MSK)
А что-то типа:

gcc -laio ...

не помогает ?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

11. "RE: Как читать из файла в фоновом режиме ?"
Сообщение от Андрей emailИскать по авторуВ закладки on 28-Мрт-02, 15:53  (MSK)
>А что-то типа:
>
>gcc -laio ...
>
>не помогает ?

файлов libaio.* в системе нет. Соответственно -laio говорит "не могу найти".

Описание попытки поставить либы - в моем предыдущем постинге.


  Рекомендовать в FAQ | Cообщить модератору | Наверх

10. "RE: Как читать из файла в фоновом режиме ?"
Сообщение от Арлекин Искать по авторуВ закладки on 28-Мрт-02, 15:52  (MSK)
Короче.
На соляре этот пример
#include <aio.h>
main()
{
   struct aiocb s;
   int k = aio_read(&s);
}
странслировался и собрался такой командой
$CC aiotest.cc -o aiotest -lposix4
БЕЗ ВОПРОСОВ. Все у тебя есть. Делай маленькие примерчики - как разберешься все пойдет. А какой командой собирать написано в первых строчках мана.
Успехов.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

12. "RE: Я ща видел те маны."
Сообщение от Арлекин Искать по авторуВ закладки on 28-Мрт-02, 16:01  (MSK)
Если в линухе ВСЕ маны ТАК пишут, я вам ребята не завидую. Соляркин ман такой:
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

ну и так далее. Попробуй с поЗиксовым ключом.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

13. "RE: Я ща видел те маны."
Сообщение от Андрей emailИскать по авторуВ закладки on 28-Мрт-02, 16:51  (MSK)
>
>ну и так далее. Попробуй с
>поЗиксовым ключом.

неа :)

Посмотрел в FreeBSD4.4. Маны есть, слово aio_read обнаружилось в /usr/lib/libc.a

Я прогрепал весь /usr/lib - и нашел таки. /usr/lib/librt.a Соответственно ключ -lrt - и все собралось.

Спасибо за помощь.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

14. "RE: Я ща видел те маны."
Сообщение от Андрей emailИскать по авторуВ закладки on 28-Мрт-02, 16:53  (MSK)
>>
>>ну и так далее. Попробуй с
>>поЗиксовым ключом.
>
>неа :)
>
>Посмотрел в FreeBSD4.4. Маны есть, слово
>aio_read обнаружилось в /usr/lib/libc.a

То есть вот это, ниже - это про мой линукс, не про фрю :)

/usr/lib/librt.a Соответственно ключ -lrt


  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру