Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11631
Последний выпуск: 19.06.2015

locking

[ Оглавление ]
               LOCKING
            
               #include <sys\locking.h>
               #include <io.h>        требуется только для объявления
                                      функции
               int locking(handle,mode,nbyte);
               int handle;            файловый handle
               int mode;              режим блокировки файла
               int nbyte;             число блокированных байтов
         
            
                
               Описание.
            
               Функция locking блокирует  или  разблокирует  байты  nbytes
         файла, определенного по handle. Блокировка байтов в файле не раз-
         решает последующего чтения и записи этих байтов другими процесса-
         ми. Разблокировка файла разрешает другим процессам читать или за-
         писывать в байты, заблокированные ранее. Блокирование или разбло-
         кирование  начинается с текущей позиции указателя на файл и расп-
         ространяется до следующих nbyte байтов или до конца файла.
               Аргумент mode определяет выполняемые  действия  блокировки.
         Он может быть одной из следующих manifest-констант.
            
                           
         Мanifest-константа                Значение
                           
         LK_LOCK           Блокировка заданных байтов. Если  байты
                           не      заблокировались,     происходит
                           повторная попытка  блокировки  через  1
                           секунду. Если после 10 попыток байты не
                           заблокировались, возвращается ошибка.
                           
         LK_RLCK           Аналогично LK_LOCK.
                           
         LK_NBLCK          Блокировка заданных байтов.  Если байты
                           не заблокированы, возвращается ошибка.
                           
         LK_NRLCK          Аналогично LK_NBLCK.
                           
         LK_UNLCK          Разблокировка  заданных  байтов.  Байты
                           должны быть ранее заблокированы.

                
               Для  файла может быть заблокирована более чем одна область,
         но работа с перектытыми областями не допускается. Кроме  того,  в
         одно  и  то же время не может быть разблокирована более  чем одна
         область.
               Когда  файл  разблокируется,  область разблокируемого файла
         должна соответствовать  ранее  заблокированной  области.  Функция
         locking не может разблокировать одновременно смежные области, так
         как   если  две  области являются смежными, каждая область должна
         быть разблокирована отдельно.
               Все блокировки должны быть удалены  перед  закрытием  файла
         или перед выходом из программы.
            
               Возвращаемое значение.
            
               Функция locking возвращает 0, если она успешно выполнилась.
         Возвращаемое значение -1 свидетельствует о неудаче  и errno уста-
         навливается в одно из следующих значений:
           
         Значение                          Его смысл
            
         EACCES            принудительная блокировка (файл  всегда
         
                           блокирован или разблокирован).
                           
         EBADF             неверный файловый handle.
                           
         EDEADLOCK         принудительная блокировка. Это значение
                           возвращается,  если задан фллаг LK_LOCK
                           или  LK_RLCK, и файл  не   может   быть
                           заблокирован после  10 попыток.
                           
               См.также open, creat.
            
               Замечание!  Функция  locking может быть использована только
         для версий MS DOS 3.0 и последующих, в ранних версиях MS DOS  она
         не дает никакого результата.
            
               Пример:
            
               #include <io.h>
               #include <sys\locking.h>
               #include <stdlib.h>
               extern unsigned char _osmajor;
               int fh;
               long pos;
               .
               .
               .
               /*  сохранить текущую позицию указателя на файл, затем бло-
         кировать область от начала файла до сохраненной позиции указателя
         на файл */
               if (_osmajor >= 3)  {
                  pos=tell(fh);
                  lseek(fh, OL, O);
                  if ((locking(fh, LK_NBLCK,pos)) != -1)  {
                  .
                  .
                  .
                  lseek(fh, OL, O);
                  locking((fh, LK_UNLCK, pos);
                                                           }
                                    }
      
            
               LOG-LOG10
            
               #include <math.h>
               double log(x);    вычисляет натуральный логарифм x.
               double log10(x);  вычисляет десятичный  логарифм x.
               double x;         значение с плавающей точкой.
            
               Описание.
            
               Функции log и log10 вычисляют соответственно натуральный  и
         десятичный логарифм x.
            
         
               Возвращаемое значение.
            
               Функции  log и log10 возвращают результат логарифма. Если x
         отрицательное значение, обе функции печатают сообщение об  ошибке
         DOMAIN  в stderr и возвращают отрицательное значение HUGE. Если x
         равно 0, обе функции печатают сообщение об ошибке SING и  возвра-
         щают отрицательное значение HUGE. И в том и в другом случае errno
         устанавливается в EDOM.
               Обработка  ошибок  может  быть модифицирована при изменении
         процедуры matherr.
               См.также exp, matherr, pow.
            
               Пример:
            
               #include <math.h>
               double xx = 1000.0, y;
               y = log(x);   /* y = 6.907755 */
               /* функция log10 вычисляет десятичный логарифм для заданно-
         го значения */
               y = log10(x); /* y = 3.0 */
               
               
            
               LONGJMP.
            
               #include <setjmp.h>
               void longjmp(env, value);
               jmp_buf env;                  переменная,   в  которой
                                             хранится окружение
               int value;                    значение,   возвращаемое
                                             при вызове setjmp.
               
               Описание.
            
               Функция longjmp восстанавливает состояние стека, ранее сох-
         раненное в env функцией setjmp.
               Функции setjmp и longjmp обеспечивают возможность  выполне-
         ния  нелокального  (nonlocal)  перехода и обычно используются для
         передачи управления на выполнение обработки ошибок;  восстанавли-
         вают  код в ранее вызванной процедуре (без использования обычного
         вызова); возвращают условные обозначения.
               Вызовом setjmp сохраняется текущее состояние стека  в  env.
         Последующий вызов longjmp восстанавливает сохраненное состояние и
         возвращает управление на указатель (точку входа), непосредственно
         следующий за соответствующим вызовом setjmp.
               Выполнение  возобновляется,  когда  вызов setjmp возвращает
         заданное value. Когда вызывается longjmp, значения всех  перемен-
         ных  (за  исключением  переменных регистра) становятся доступными
         для процедуры, которая принимает управление и  содержит  значения
         этих переменных. Значения переменных регистра непредсказуемы.
               Функция longjmp должна вызываться ранее функции, определяю-
         щей возврат setjmp. Если longjmp вызвана после функции, определя-
         ющей возврат setjmp, то может произойти непредсказуемое поведение
         программы.
               Значение  value,  возвращаемое longjmp, должно быть ненуле-
         вым. Если для value задан аргумент 0, значение возврата заменяет-
         
         ся значением 1.
            
               Возвращаемое значение.
            
               Возвращаемого значения нет.
               См. также setjmp.
            
               Предупреждение! Значения переменных регистра  в  процедуре,
         вызывающей setjmp, после выполнения longjmp не могут быть восста-
         новлены к собственным значениям.
               
      
            Пример:
         
            #include <stdio.h>
            #include <setjmp.h>
            jmp_buf mark;
            main()
                 {
                 if (setjmp(mark) != 0)
                 {   printf("longjmp has been called\n");
                     recover();
                     exit(1);
                  }
                 printf("setjmp has been called\n");
                 .
                 .
                 .
                 p();
                 .
                 .
                 .
                 }
            
            p()
                {
                int error = 0;
                .
                .
                .
                if (error != 0)
                   longjmp(mark, -1);
                .
                .
                .
                }
            
            recover()
                {
            
               /*  при  выходе из программы убедитесь, что файлы данных не
         будут запорчены */
               .
               .
               .
               }.
               
         
                    
               

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог