CodeNet / Языки программирования / C / C++ / Linux/Unix / Справочник С/C++ для UNIX - Список функций
CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник С/C++ для UNIX - Список функций
CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник С/C++ для UNIX - Список функций
fopen
FOPEN #include <stdio.h> FILE *fopen(pathname, type); char *pathname; path-имя файла. char *type; разрешенный тип доступа. Описание. Функция fopen открывает файл, определяемый path-именем. Символы в строке type определяют тип доступа, требуемый для фай- ла, следующим образом. РЕЖИМ ОПИСАНИЕ "r" открыть файл для чтения.(Этот файл должен существовать). "w" открыть пустой файл для записи; если этот файл ранее существовал, его содержимое уничтожается. "a" открыть файл для записи (добавления) в конец. Если данного файла нет, то вначале он создается. "r+" открыть файл одновременно для чтения и записи. Файл должен существовать. "w+" открыть пустой файл для чтения и записи. Если этот файл ранее существовал, его сожержимое уничтожается. "a+" открыть файл для чтения и добавления. Если файла нет, вначале он создается. Замечание! Нужно внимательно применять режимы "w", "w+", так как они могут уничтожить существующие файлы. Если файл открыт при помощи типа "a" или "a+", все операции записи выполняются в конец файла. При использовании функций fseek или rewind возможно перепозиционирование указателя на файл; нес- мотря на это, указатель на файл перед выполнением любых операций записи всегда возвращается в конец файла. Таким образом, сущест- вующие данные не будут перезаписаны. При использовании типов "r+', "w+", "a+" допускается одновременно чтение и запись. (Гово- рится, что файл открывается для обновления). Поэтому, при перек- лючении чтения на запись и наоборот нужно использовать функции fseek или rewind. Для функции fseek (при необходимости) может быть точно определена текущая позиция. Дополнительно к значениям, описанным выше, может быть до- бавлен в строке type один из следующих символов, чтобы специфици- ровать способ преобразования символа новой строки. Символ Значение t открыть в текстовом (преобразующем) режиме; при вводе комбинация "Возврат каретки - перевод строки" преобразовывается к единственному символу "перевода строки". При выводе символ перевода строки преобразовывается в комбинацию ВК-ПС. b открыть в двоичном (непреобразующем) режиме; выше описанные преобразования не осуществляются. Если t или b в строке type не задается, режим преобразова- ния определяется переменной _fmode и режимом, устанавливаемым по умолчанию. Возвращаемое значение. Функция fopen возвращает указатель на открытый файл. Значе- ние указателя NULL свидетельствует об ошибке. См.также fclose, fcloseall, fdopen, ferror, fileno, freopen, open, setmode. Пример: #include <stdio.h> main (argc, argv) int argc; char *argv[]; { FILE *stream; /* применение fopen позволяет открыть файл, имя которого хранится в указателе argv[argc-1]; если это не удается, программа распечатывает сообщение об ошибке */ if ((stream= fopen(argv[argc-1]), "r"))==NULL) { fprintf (stderr, "%s не может открыть файл %s\n", argv[0], argv[argc-1]); exit(1); } /* Замечание! Имя программы хранится в argv[0] только для версий MS DOS 3.0 и последующих; в предыдущих версиях MS DOS, argv[0] содержится в строке "Си" */ Образец командной строки: update employ.dat На выходе будет сообщение: "C:\BIN\UPDATE.EXE не может открыть файл employ.dat ". FP_OFF - FR_SEG #include <dos.h> unsigned FP_OFF(longptr); unsigned FP_SEG(lohgptr); char far *longptr; long-указатель на адрес памяти. Описание. Макро FP_OFF и FP_SEG могут использоваться соответственно для установки разветвления или взятия сегмента посредством long-указателя longptr. Возвращаемое значение. Макро FP_OFF возвращает беззнаковое целое значение, предс- тавляющее разветвление. Макро FP_SEG возвращает беззнаковое целое значение, предс- таляющее адрес сегмента. См.также segread. Пример. #include <dos.h> char far *p; unsigned int seg_val; unsigned int off_val; . . . seg_val=FP_SEG(p); off_val=FP_OFF(p); _FPRESET #include <float.h> void _fpreset(); переинициализирует математиче- ский пакет с плавающей точкой. Описание: Функция _fpreset переинициализирует математический пакет с плавающей точкой. Эта функция обычно используется с процедурами signal, system или с семейством процедур exec, spawn. Если программа вместе с функцией signal захватывает сигналы ошибок с плавающей точкой (SIGFPE), то она при вызове _fpreset благополучно восстанавливается из ошибок с плавающей точкой и вы- полняет longjmp. Замечание! В версиях MS DOS, более ранних чем 4.0, child-процесс, выполнимый в exec, spawn или system, может воздей- ствовать на состояние с плавающей точкой parent-процесса, если используется 8087 или 80287 сопроцессор. Поэтому, если использу- ется сопроцессор 8087 либо 80287, рекомендуются помнить, что: * exec, spawn, system не могут вызываться в процессе вычис- ления выражения с плавающей точкой; * _fpreset должна быть вызвана после этих процедур, если child-процесс может выполнить требуемую операцию. Возвращаемое значение: Возвращаемого значения нет. См.также execl, execle, execlp, execlpe, execv, execve, execvp, execvpe, signal, spawnl, spawnle, spawnlp, spawnlpe, spawnv, spawnve, spawnvp, spawnvpe. Пример. #include <stdio.h> #include <signal.h> #include <setjmp.h> #include <float.h> int fphandler (); jmp_buf mark; double a = 1.0, b = 0.0, c; main() { if(signal(SIGFPE, fphandler)==(int(*)())-1) abort(); if(setjmp(mark)==0) { c = a/b; printf("Should never get here\n"); } printf("Recovered from floating-point error\n"); } int fphandler(sig,num) int sig,num; { printf("signal=%d subcode =%d\n",sig,num); _fpreset(); /* переинициализирует пакет с плавающей точкой */ longjmp(mark,-1); }