The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Как читать из файла в фоновом режиме ?, !*! Андрей, 25-Мрт-02, 12:02  [смотреть все]
Привет всем :)

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

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

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

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

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

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


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

  • 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: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




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

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