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);
}
