Программирование на C для linux - Описания функций библиотеки libc


  • Cофт для web мастера
  • Мои скрипты для HTP
  • Команды HTP (HOD Text Processor)
  • Документация по PERL
  • Функции LIBC
  • О сайте и авторе





  • Rambler's Top100 Рейтинг@Mail.ru

    Программирование на C для unix - Описания функций библиотеки libc

    8. Повторная Входимость

    Повторная входимость - это характеристика библиотечных функций, которые позволяют разным задачам использовать одно и тоже адресное пространство, в котором хранящиеся величины не изменяются между вызовами. В реализации библиотеки функций Cygnus C во всех возможных ситуациях обеспечивается повторная входимость функций. Тем не менее, есть несколько функций, повторную входимость которых осуществить нетривиально. Некоторые приемы были применены, чтобы эти функции полностью обладали свойством повторной входимости.

    Эти приемы используют структуру _reent, определенную в reent.h. Переменная, определенная как struct _reent называется "структурой, содержащей информацию для обеспечения повторной входимости". Все функции, которые должны изменять глобальные переменные, доступны в двух версиях. Первая версия имеет обычное имя и использует один глобальный вариант структуры, содержащей информацию для обеспечения повторной входимости. Второй имеет другое имя, обычно отличающееся добавлением _ в начале и _r в конце, и берущий указатель на отдельную структуру, содержащую информацию для обеспечения повторной входимости.

    Например, функция fopen имеет два аргумента, file и mode, и использует глобальную структуру, содержащую информацию для обеспечения повторной входимости. Функция _fopen_r имеет дополнительный аргумент Struct_reent, который является указателем на отдельную структуру, содержащую информацию для обеспечения повторной входимости.

    Каждая функция, использующая глобальную структуру, содержащую информацию для обеспечения повторной входимости, использует глобальную переменную _impure_ptr, которая указывает на структуру, содержащую информацию для обеспечения повторной входимости.

    Это означает, что возможны два способа реализации повторного вхождения. Оба требуют от каждой нити исполнения инициализировать уникальную глобальную переменную типа struct _reent:

    1. Использование повтоpно входимой веpсии библиотеки функций после инициализации глобальной структуры, содержащей информацию для обеспечения повторной входимости для каждого пpоцесса. Указатель на этy стpyктypy использyется как дополнительный аpгyмент для всех библиотечных функций.
    2. Сделать так, чтобы каждая нить исполнения имела указатель на свою уникальную структуру, содержащую информацию для обеспечения повторной входимости в глобальную переменную _impure_ptr, и вызывать стандартные библиотечные процедуры.

    Следующие функции имеют как повторно-входимые, так и обычные версии.

    Эквивалент для переменной errno:

          _errno_r
    
    Функции локала
          _localeconv_r  _setlocale_r
    
    Эквиваленты для переменных stdio:
          _stdin_r        _stdout_r       _stderr_r
    
    Функции stdio:
          _fdopen_r       _mkstemp_r       _remove_r
          _fopen_r        _mktemp_r        _rename_r
          _getchar_r      _perror_r        _tempnam_r
          _gets_r         _putchar_r       _tmpnam_r
          _iprintf_r        _puts_r          _tmpfile_r
    
    Сигнальные функции:
          _raise_r        _signal_r
    
    Функции stdlib:
          _dtoa_r         _realloc_r      _strtoul_r
          _free_r         _srand_r        _system_r
          _malloc_r       _strtod_r
          _rand_r         _strtol_r
    
    Функции string:
          _strtok_r
    
    Функции system:
          _close_r        _lseek_r        _stat_r
          _fork_r         _open_r         _unlink_r
          _fstat_r        _read_r         _wait_r
          _link_r         _sbrk_r         _write_r
    

    Функции time:

          _asctime_r
    

    :.: Max Darianov (Џ) SPB 2003. — Вы можете выделять, копировать и использовать любой материал с этого сайта, не устанавливая никаких лишних ссылок.
    Сайт управляется системой uCoz