ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



 

Часть 2

                                      - 94 -
                                            
            
               FABS
            
               #include 
            
               double fabs(x);
               double x;                    значение с плавающей точкой
            
               Описание:
            
               Функция fabs возвращает абсолютное значение своего аргумен-
         та с плавающей точкой.
            
               Возвращаемое значение:
            
               Функция fabs возвращает абсолютное значение своего аргумен-
         та. Возвращаемого значения в случае ошибки нет.
               См.также abs, cabs, labs.
            
               Пример:
            
               #include 
            
               double x,y;
               .
               .
               .
               y = fabs(x);.
      

               FCLOSE-FCLOSEALL
            
               #include 
               int fclose(stream);          закрывает открытый поток.
               FILE *stream;                указатель на структуру FILE.
               int fcloseall();             закрывает все открытые потоки.
            
               Описание.
            
               Функции  fclose, fcloseall закрывают соответственно поток и
         потоки. Перед закрытием все буферы, связанные с потоками,  обнов-
         ляются.  При  закрытии потока буферы, захваченные системой, осво-
         бождаются. Буферы, определенные функцией setbuf, автоматически не
         освобождаются .
               Функция fclose закрывает  заданный  поток  stream.  Функция
         fcloseall  закрывает  все  открытые потоки  за исключением stdin,
         stdout, stderr, stdaux, stdprn.
            
               Возвращаемое значение.
            
               Функция fclose возвращает 0, если поток удачно закрыт. Фун-
         кция fcloseall возвращает общее число закрытых потоков. В  случае
         ошибки обе функции возвращают значение EOF.
               См. также функции close, fdopen, fflush, fopen, freopen.
            

                                      - 95 -
         
         
               Пример:
            
               #include 
               FILE *stream;
               int numclosed;
               stream=fopen("data", "r");
               .
               .
               .
               /* следующий оператор закроет поток */
               fclose (stream);
               /* следующий оператор закрывает все потоки, за исключением
               stdin, stdout, stderr, stdaux, stdprn */
               numclosed=fcloseall();
      
      
               FCVT
               
               #include           требуется только для  объявле-
                                            ния функ-
                                            ции.
               char fcvt (value, ndec, decptr, signptr);
               double value;                преобразуемое число.
               int ndec;                    количество цифр после десятич-
                                            ной точки.
               int *decptr;                 указатель на запомненную пози-
                                            цию десятичной точки.
               int *signptr;                указатель на запомненный инди-
                                            катор знака.
               
               Описание:
             
               Функция  fcvt  преобразует  число с плавающей точкой в сим-
         вольную строку. Value - число с плавающей точкой,  которое  нужно
         преобразовать.  Функция  fcvt  запоминает  цифры  из value в виде
         строки и добавляет к ней нулевой символ ('0\').
               В аргументе ndec запоминается количество цифр  после  деся-
         тичной точки.
               Если  количество цифр после десятичной точки в value превы-
         шает ndec, число  округляется,  как  это  делается  в  формате  F
         FORTRAN. Если цифр меньше, чем в ndec, строка дополняется нулями.
               В  строке хранятся только цифры. Позиция десятичной точки и
         знак числа value могут быть  получены  после  вызова  функции  из
         decptr  и  signptr.  Аргумент decptr указывает на целое значение,
         задающее позицию десятичной точки, считая от начала строки. 0 или
         отрицательное целое значение означают, что десятичная точка лежит
         левее самой первой цифры. Аргумент  signptr  указывает  на  целое
         значение, определяющее знак value: если целое signptr установлено
         в 0, то value - положительное, если целое signptr - ненулевое, то
         value - отрицательное.
               
               Возвращаемое значение:
               
               Функция fcvt возвращает указатель на строку цифр. Возвраща-
         емого значения в случае ошибки нет.
               См.также atol, atof, atoi, ecvt, gcvt.

                                      - 96 -
         
         
            
               Замечание!  Функции ecvt и fcvt используют для преобразова-
         ния один и тот же статически распределенный буфер. Каждое обраще-
         ние к одной из этих процедур уничтожает результат предыдущего об-
         ращения.
      
               Пример.
               
               #include 
               int decimal, sign;
               char *buffer;
               int precision = 10;
               buffer = fcvt (3.1415926535, precision,&decimal,&sign);
               /*buffer ="31415926535", decimal=1, sign=0*/
      
      
                FDOPEN
            
               #include 
               FILE *fdopen (handle,type);
               int handle;                  Handle-р, ссылающийся на отк-
                                            рытый файл.
               char type;                   Разрешенный тип доступа.
            
               Описание:
            
               Функция fdopen связывает поток ввода/вывода с файлом, иден-
         тифицированным  handle,  что позволяет сделать файл, открытый как
         низкоуровневый, форматированным и буферизованным. Более  подробно
         этот процесс описан в разделе 4.7 "Ввод и вывод" данного руковод-
         ства.  Символьная строка type определяет тип доступа к требуемому
         файлу следующим образом:
            
            ТИП                   ОПИСАНИЕ
                                                                  
            "r"          Открыть  для  чтения.  (Этот файл  должен
                         существовать).
                                                                               
            "w"          Открыть пустой файл для записи; если этот
                         файл  ранее  существовал,  его содержимое
                         уничтожается.
                         
            "a"          Открыть файл для  записи  (добавления)  в
                         конец  файла.  Создать  файл заново, если
                         его нет.
                         
            "r+"         Файл открыт  одновременно  для  чтения  и
                         записи. Файл должен существовать.
                         
            "w+"         Открыть  пустой  файл для чтения и записи.
                         Если  этот   файл   существует,  то    его
                         сожержимое уничтожается.
                         
            "a+"         Файл для  чтения  и  добавления.   Создать
                         файл  заново, если его нет.

                                      - 97 -
         
         
            
               Замечание! Нужно внимательно применять  режимы  "w",  "w+",
         так  как они могут уничтожить существующие файлы. Специфицирован-
         ный type должен быть совместим с режимами доступа или sharing-ре-
         жимом, с которым файл был открыт. За поддержку этой совместимости
         отвечает пользователь.
               Если файл открыт с типом "a" или "a+", все операции  записи
         выполняются  в  конец файла, хотя при использовании функций fseek
         или rewind  возможно перемещение файлового указателя; однако, пе-
         ред выполнением любых операций записи он  всегда  возвращается  в
         конец  файла.  Таким  образом, существующие данные не смогут быть
         перезаписанными. Когда специфицированы типы "r+", "w",  "a",  од-
         новременно допускается чтение и запись. (Говорят, что файл открыт
         для обновления). Поэтому  при переключении чтения на запись и на-
         оборот,  нужно использовать функции fseek или rewind. Для функции
         fseek (при необходимости) может быть специфицирована текущая  по-
         зиция.
               Дополнительно к значениям, приведенным выше, может быть до-
         бавлен один из следующих символов к строке type, чтобы специфици-
         ровать режим преобразования символов новой строки.
            
            Символ               Значение
            
              t          Открыть   в   текстовом   (транслирующем)
                         режиме; ввод комбинации "Возврат  каретки
                         - перевод   строки"   преобразовывать   к
                         единственному  символу "перевод  строки".
                         Вывод  символа "перевод строки"  преобра-
                         зовывать в комбинацию "Возврат каретки  -
                         перевод строки".
            
              b          Открыть  в   двоичном   (нетранслирующем)
                         режиме; предшедствующие    преобразования
                         подавляются.
                         
               Если t или b в строке type не заданы, то режим преобразова-
         ния определяется переменной _fmode, устанавливаемой по умолчанию.
            
            
               Возвращаемое значение.
            
               Функция  fdopen  возвращает  указатель на открытый поток. В
         случае ошибки значение указателя равно NULL.
               См. также dup, dup2,  fclose,  fcloseall,  fopen,  freopen,
         open.
            
               Пример:
            
               #include 
               #include 
               FILE *stream;
               int fh;
               fh=open("data", O_RDONLY);
               /*  следующий  оператор  позволяет связать поток с открытым
         файлом */

                                      - 98 -
         
         
               stream = fdopen(fh, "r");.
      
      
               FEOF
            
               #include 
               int feof(stream);
               FILE *stream;                указатель на структуру FILE.
            
               Описание.
            
               Функция feof определяет, достигнут ли конец заданного пото-
         ка. Если конец файла (EOF) достигнут, то операции чтения  возвра-
         щают индикатор конца файла  пока поток не будет закрыт или вызва-
         на функция rewind.
            
               Возвращаемое значение.
            
               Если  текущая  позиция является концом файла (EOF), функция
         feof возвращает ненулевое значение. Если текущая позиция не явля-
         ется концом файла - возвращается значение 0. Функция feof  ошибок
         не возвращает.
               См. также clearerr, eof, ferror, perror.
               
               Замечание! Функция feof реализуется как макро.
            
               Пример:
            
               #include 
               char string[100];
               FILE *stream;
               /*  следующие  операторы  обеспечивают  ввод строк, пока не
         встретится EOF */
               while (!feof(stream))
               if (fscanf(stream, "%s", string))
               process (string);.
      
      
               FERROR
            
               #include 
               int ferror (stream);
               FILE *stream;                указатель на структуру FILE.
            
            
               Описание.
            
               Функция ferror проверяет ошибки чтения и  записи  заданного
         потока. При возникновении ошибки индикатор ошибки stream остается
         установленным  до тех пор, пока поток не закроется или "разрушит-
         ся" (rewound)  или же пока не будет вызвана функция clearerr.
            
            
               Возвращаемое значение.
            

                                      - 99 -
         
         
               В случае обнаружения ошибки в потоке  функция ferror  возв-
         ращает ненулевое значение. Возвращаемое значение 0 свидетельству-
         ет об отсутствии ошибки.
               См. также clearerr, eof, ferror, perrpr.
               Эта функция реализуется как макро.
            
               Пример:
            
               #include 
               FILE *stream;
               char *string;
               .
               .
               .
            
               /*  следующие  операторы вводят данные в поток и проверяют,
         не возникла ли ошибка при записи. Перед записью данных  в  поток
         он должен быть предварительно открыт */
               fprintf (stream, "%s\n", string);
               if (ferror(stream))
               { fprintf (stderr, "write error\n");
               clearerr (stream;
                                }
      
               FFLUSH
            
            
               #include 
               int fflush (stream);
               FILE *stream;                указатель на структуру FILE.
            
               Описание.
            
               Если заданный поток stream открыт для вывода, то содержимое
         буфера,  связанного с потоком stream функции fflush, записывается
         в соответствующий файл. Если поток открыт для ввода,  то  функция
         fflush  очищает содержимое буфера. После вызова функции поток ос-
         тается открытым. Для  небуферизованного  потока  применение  этой
         функции не эффективно.
            
               Возвращаемое значение.
            
               Функция  fflush  возвращает 0, если буфер успешно обновлен.
         Это же значение возвращается, когда поток  не  имеет  буфера  или
         когда  он открыт только для чтения. В случае возникновения ошибки
         возвращается значение EOF.
               См. также fclose, fflushall, setbuf.
               
               Замечание! Буферы автоматически обновляются, когда они пол-
         ны, когда поток закрывается или  произошло  нормальное  окончание
         работы программы без закрытия потока.
            
               Пример:
            
               #include 

                                      - 100 -
         
         
               FILE *stream;
               char buffer[BUFSIZ];
               .
               .
               .
               /*  следующие  два оператора обновляют буфер потока и уста-
         навливают новый буфер для потока */
               fflush (stream);
               setbuf (stream, buffer);.
      
            
               _FFREE
            
               #include           требуется только для  объявле-
                                            ния  функции.
               void _ffree(ptr);
               char far *ptr;               указатель на захваченный блок
                                            памяти.
             
               Описание.
            
               Функция  _ffree  освобождает  блок памяти вне умалчиваемого
         сегмента данных. Аргумент ptr указывает на ранее захваченный блок
         памяти посредством вызова функции _fmalloc.
               Числом освободивщихся байтов является число байтов, опреде-
         ленных при захвате (размещении) блока. После вызова освободивший-
         ся блок вновь пригоден для захвата.
            
               Возвращаемое значение.
            
               Возвращаемого значения нет.
               См.также _fmalloc, free, maloc.
            
               Замечание! Попытка освободить неверный  ptr  (указатель  не
         захватывается посредством _fmalloc) может привести к последующему
         захвату и вызвать ошибки.
            
               Пример:
            
               #include 
               #include 
               char far *alloc;
               /* Захватывает 100 байтов и затем освобождает их */
               if ((alloc=_fmalloc(100))==NULL)
               /* проверяет на правильность указателя */
               printf("unable to allocate memory\n");
               else   {
               .
               .
               .
               _ffree(alloc);
               /* освобождает память для heap */
               }
      
      

                                      - 101 -
         
         
               FGETC-FGETCHAR
            
            
               #include 
               int fgetc (stream);          читает символ из потока.
               FILE *stream                 указатель на структуру FILE.
               int fgetchar();              читает символ из stdin.
            
               Описание.
            
               Функция  fgetc  читает отдельный текущий символ из входного
         потока stream и увеличивает соответствующий  указатель  (если  он
         есть)  для  указания  следующего  считываемого  символа.  Функция
         fgetchar является эквивалентной функции fgetc(stdin).
            
               Возвращаемое значение.
            
               Эти две функции возвращают считанный символ. В случае  воз-
         никновения ошибки или достижения конца файла  возвращается значе-
         ние EOF; однако, значение EOF может быть воспринято как целая ве-
         личина,  тогда  нужно использовать функции ferror и feof для про-
         верки ошибки или конца файла.
               См. также fputc, fputchar, getc, getchar.
               
               Замечание! Процедуры fgetc  и  fgetchar  идентичны  getc  и
         getchar, но они являются функциями, а не макро.
            
               Пример:
            
               #include 
               FILE *stream;
               char buffer[81]; int i; int ch;
               . . .
               /* следующие операторы выбирают строку из потока */
               for (i=0;  (i<80)  &&  ((ch=fgetc(stream))  !=EOF)  &&
               (ch!='\n'); i++)
               buffer[i]=ch;
               buffer[i]='\0';
               /* В вышеприведенных  операторах для сбора строки из потока
         stdin   вместо   fgetc(stream)   должна  быть  применена  функция
         fgetchar(). То же эквивалентно для fgetc(stdin). */
      
      
               FGETS
            
            
               #include 
               char *fgets(string, n, stream);читает  строку  из  потока
                                              stream.
               char *string;                  память для хранения данных.
               int n;                         число сохраняемых символов.
               FILE *stream;                  указатель на структуру FILE.

            

                                      - 102 -
         
         
               Описание.
            
               Функция  fgets  читает  строку  из входного потока stream и
         располагает ее в string. Символы считываются, начиная  с  текущей
         позиции stream, до символа новой строки '\n'  или до конца потока,
         либо пока число считанных символов не станет равным n-1.  Резуль-
         тат  размещается в string, а затем к нему добавляется символ null
         -'\0'. Символ новой строки также включается в string. Если в нача-
         ле считывания n равнялось 1, то string будет пустой (""). Функция
         fgets аналогична библиотечной функции gets, однако, gets заменяет
         символ новой строки нулевым символом.
            
               Возвращаемое значение.
            
               Функция fgets возвращает указатель на строку string. В слу-
         чае ошибки или конца файла  возвращается значение NULL. Для опре-
         деления того, что произошло - ошибка или конец файла, используют-
         ся функции feof и ferror.
               См. также fputs, gets, puts.
            
               Пример:
               
               include 
               FILE *stream;
               char line[100], *result;
               /* следующий оператор выбирает строку  символов  из  потока
         stream. Может быть считано не более 99 символов  либо все символы
         до символа новой строки '\n', включая и его. */
               result = fgets(line, 100, stream);.
      
            
               FIEEETOMSBIN-FMSBINTOIEEE
            
            
               #include 
               int  fieeetomsbin(src4,dst4);преобразует число с плавающей
                                            точкой в формате.
                                            IEEE в двоичный формат с пла-
                                            вающей точкой MS.
               int fmsbintoieee(src4,dst4); преобразует число  в  двоичном
                                            формате MS  с плавающей точкой
                                            в  число с  плавающей точкой в
                                            формате IEEE.
            
               Описание.
            
               Процедура  fieeetomsbin  преобразовывает  число с одинарной
         точностью и с плавающей точкой в формате IEEE к двоичному формату
         Microsoft.
               Процедура fmsbintoieee преобразовывает  число  с  плавающей
         точкой в двоичном формате Microsoft к формату IEEE.
               Эти  процедуры  позволяют программам Си, которые записывают
         числа с плавающей точкой в формат  IEEE,  использовать  численные
         данные  в  полях  данных случайного доступа, созданные при помощи
         Microsoft BASIC, который записывает числа с  плавающей  точкой  в
         двоичный формат Microsoft и наоборот.

                                      - 103 -
         
         
               Аргумент  scr4  указывает  на преобразуемое float-значение.
         Результат записывается в расположение, заданное аргументом dst4.
            
               Возвращаемое значение.
            
               Эти функции возвращают 0, если преобразование было успешным
         и 1, если преобразование повлекло переполнение.
               См.также dieeetomsbin, dmsbintoieee.
            
               Замечание! Эти процедуры не обрабатывают IEEE NAN и  беско-
         нечность. Необычные IEEE трактуются в преобразованиях как 0.
      
      
               FILELENGTH
            
            
               #include               требуется только для объявле-
                                            ния функции.
               long filelength(handle);
               int handle;                  handle-р, ссылающийся на  от-
                                            крытый файл.
            
               Описание.
            
               Функция filelength возвращает в байтах длину файла, связан-
         ного с заданным handle.
            
               Возвращаемое значение.
            
               Функция filelength возвращает длину файла в байтах. Возвра-
         щаемое значение -1L свидетельствует об ошибке  и errno устанавли-
         вается в EBADF, чтобы указать на неверный файловый handle.
               См.также chsize, fileno, fstat, stat.
            
               Пример:
            
               #include 
               #include 
               #include 
               FILE *stream;
               long length;
               stream=fopen("data","r");
               .
               .
               .
               /*  следующие операторы пытаются определить ** длину файла,
         связанного с потоком stream */
               length=filelength(fileno(stream));
               if(length==-1L)
               perror("filelength failed");.
      
      
            
            

                                      - 104 -
         
               FILENO
         
               #include 
               int fileno (stream);
               FILE *stream;                указатель на структуру FILE.
                                                                                                                       
               Описание.
            
               Функция fileno возвращает  текущий  handle  (номер)  файла,
         связанный  с потоком stream. Если поток связан более  чем с одним
         handle-ром  и когда поток предварительно открыт, в качестве возв-
         ращаемого значения определяется handle.
            
               Возвращаемое значение.
            
               Функция fileno возвращает handle-р файла; в случае ошибки -
         возвращаемого значения нет. Если поток stream не задан как откры-
         тый файл, тогда возвращаемое значение не определено.
               См. также fdopen, filelength, fopen, freopen.
               
               Замечание! Fileno реализуется как макро.
            
               Пример:
   
               #include 
               int result;
               /* следующий оператор определяет handle  файла  для  потока
         stderr*/
               result= fileno(stderr);      /* результат равен 2 */
         
               
               FLOOR
            
            
               #include 
               double floor(x);
               double x;                    значение с плавающей точкой.
               
               Описание.
            
               Функция floor возвращает значение с плавающей точкой, пред-
         ставляющее наибольшее целое, которое меньше или равно x.
            
               Возвращаемое значение.
            
               Функция floor возвращает результат с плавающей точкой. Воз-
         вращаемого значения в случае ошибки нет.
               См.также ceil, fmod.
            
               Пример:
            
               #include 
               double y;
               .
               .
               .
               y = floor(2.8); /* y = 2.0 */

                                      - 105 -
         
         
               y = floor(-2.8); /* y = -3.0 */
      
      
               FLUSHALL
            
            
               #include 
               int flushall();
            
               Описание.
            
               Функция  flushall  записывает содержимое всех буферов, свя-
         занных с открытыми input потоками, в соответствующие  файлы.  Все
         буферы, связанные с открытыми потоками, очищаются; следующая опе-
         рация  чтения  (если  она есть) считывает новые данные из входных
         файлов в буферы. После вызова функции flushall  все потоки  оста-
         ются открытыми.
            
               Возвращаемое значение.
            
               Данная   функция  возвращает  количество  открытых  потоков
         (входных и выходных). В случае ошибки возвращаемого значения нет.
               См. также fflush.
               
               Замечание! Буферы автоматически обновляются, когда они пол-
         ны, когда потоки закрываются или происходит нормальное завершение
         работы программы без закрытия потоков.

               Пример:
            
               #include 
               int numopen;
               .
               .
               .
               /* следующий оператор ожидает любой ввод/вывод во все пото-
         ки */
               numopen=flushall();.
      
      
               _FMALLOC
            
            
               #include           требуется только для  объявле-
                                            ния  функции.
               char far *_fmalloc(size);
               unsigned size;               количество  байтов в захвачен-
                                            ном блоке.
            
               Описание.
            
               Функция  _fmalloc  захватывает  вне  умалчиваемого сегмента
         данных блок памяти, по крайней мере не меньший, чем блок из  size
         байтов.  (Блок может быть больше, чем из size байтов, принадлежа-
         щих пространству, которое требуется для выравнивания).

                                      - 106 -
         
         
            
               Возвращаемое значение.
            
               Функция _fmalloc возвращает far-указатель на char. В  памя-
         ти, на которую указывает возвращаемое значение, гарантировано вы-
         равнивание  для хранения любого типа объекта. Чтобы получить ука-
         затель на тип, отличный от char, используется преобразователь ти-
         па возвращаемого значения.
               Функция _fmalloc возвращает far-указатель на char. Если вне
         умалчиваемого сегмента данных памяти не достаточно, то захват па-
         мяти будет повторен снова, используя и этот сегмент. Если  памяти
         снова недостаточно, возвращаемое значение равно NULL.
               См.также _ffree, _fmsize, malloc, realloc.
            
               Пример:
            
               #include 
               int *intarray;
               /* захватывает пространство для 20 целых */
               intarray=(int*)_fmalloc(20*sizeof(int));.
      
            
               FMOD
            
            
               #include 
               double fmod(x,y);
               double x; значение с плавающей точкой.
               double y;
            
               Описание.
            
               Функция  fmod вычисляет остаток от деления x на y с плаваю-
         щей точкой, где x=iy+f, i - целое, f - имеет тот же знак, что  x;
         а абсолютное значение x меньше, чем абсолютное значение y.
            
               Возвращаемое значение.
            
               Функция  fmod возвращает остаток с плавающей точкой. Если y
         равно 0, функция возвращает 0.
               См.также ceil, fabs, floor.
            
               Пример:
            
               #include 
               double x,y,z;
               x = -10.0;
               y = 3.0;
               z = fmod(x,y); /* z = -1.0 */.
      
      
               _FMSIZE
            
            
               #include           требуется только для  объявле-

                                      - 107 -
         
         
                                            ния  функции.
               unsigned _fmsize(ptr);
               char far *ptr;               указатель на блок памяти.
            
            
               Описание.
            
               Функция  _fmsize  возвращает  размер в байтах блока памяти,
         захваченного посредством вызова _fmalloc.
            
            
               Возвращаемое значение.
            
               Функция _fmsize возвращает размер в байтах как  беззнаковое
         целое.
               См.также   _ffree,   _fmalloc,   malloc,   _msize,  _nfree,
         _nmalloc, _nmsize.
            
               Пример:
            
               #include 
               #include 
               main()
               {
               char far *stringarray;
               stringarray=_fmalloc(200*sizeof(char));
               if (stringarray != NULL)
                   printf("%u bytes allocated\n",
                       _fmsize(stringarray));
               else
                   printf("Allocation request failed.\n");
               }
      
            
               FOPEN
            
            
               #include 
               FILE *fopen(pathname, type);
               char *pathname;              path-имя файла.
               char *type;                  разрешенный тип доступа.
            
               Описание.
            
               Функция fopen  открывает  файл,  определяемый  path-именем.
         Символы  в строке type определяют тип доступа, требуемый для фай-
         ла, следующим образом.
                
            РЕЖИМ                   ОПИСАНИЕ
                                                            
            "r"          открыть файл для чтения.(Этот файл должен
                         существовать).
                                                            
            "w"          открыть пустой файл для записи; если этот
                         файл  ранее  существовал,  его содержимое

                                      - 108 -
         
         
                         уничтожается.
                         
            "a"          открыть файл для  записи  (добавления)  в
                         конец. Если данного файла нет, то вначале
                         он создается.
                         
            "r+"         открыть файл одновременно  для  чтения  и
                         записи. Файл должен существовать.
                         
            "w+"         открыть  пустой файл для чтения и записи.
                         Если этот  файл  ранее  существовал,  его
                         сожержимое уничтожается.
                         
            "a+"         открыть  файл  для  чтения и  добавления.
                         Если файла нет, вначале он создается.
            
               Замечание! Нужно внимательно применять  режимы  "w",  "w+",
         так как они могут уничтожить существующие файлы.
                 
               Если файл открыт при помощи типа "a" или "a+", все операции
         записи выполняются в конец файла. При использовании функций fseek
         или rewind  возможно перепозиционирование указателя на файл; нес-
         мотря  на это, указатель на файл перед выполнением любых операций
         записи всегда возвращается в конец файла. Таким образом,  сущест-
         вующие  данные  не  будут  перезаписаны.  При использовании типов
         "r+', "w+", "a+" допускается одновременно чтение и запись. (Гово-
         рится, что файл открывается для обновления). Поэтому, при  перек-
         лючении  чтения  на запись и наоборот  нужно использовать функции
         fseek или rewind. Для функции  fseek  (при  необходимости)  может
         быть точно определена текущая позиция.
               Дополнительно  к  значениям, описанным выше, может быть до-
         бавлен в строке type один из следующих символов, чтобы специфици-
         ровать способ преобразования символа новой строки.
      
      
            Символ               Значение
            
              t          открыть   в   текстовом   (преобразующем)
                         режиме;  при  вводе  комбинация  "Возврат
                         каретки      -      перевод       строки"
                         преобразовывается к единственному символу
                         "перевода  строки".  При  выводе   символ
                         перевода   строки   преобразовывается   в
                         комбинацию ВК-ПС.
                         
              b          открыть   в   двоичном  (непреобразующем)
                         режиме; выше описанные преобразования  не
                         осуществляются.
                         
                         
               Если t или b в строке type не задается, режим  преобразова-
         ния  определяется переменной _fmode и режимом, устанавливаемым по
         умолчанию.
            
      

                                      - 109 -
         
         
               Возвращаемое значение.
            
               Функция fopen возвращает указатель на открытый файл. Значе-
         ние указателя NULL свидетельствует об ошибке.
               См.также  fclose,  fcloseall,   fdopen,   ferror,   fileno,
         freopen, open, setmode.
            
               Пример:
            
               #include 
               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 
               unsigned FP_OFF(longptr);
               unsigned FP_SEG(lohgptr);
               char far *longptr;          long-указатель на адрес памяти.
            
               Описание.
            
               Макро FP_OFF и FP_SEG могут  использоваться  соответственно
         для   установки  разветвления  или  взятия  сегмента  посредством
         long-указателя longptr.
            
               Возвращаемое значение.
            
               Макро FP_OFF возвращает беззнаковое целое значение,  предс-
         тавляющее разветвление.
               Макро  FP_SEG возвращает беззнаковое целое значение, предс-
         таляющее адрес сегмента.
               См.также segread.

                                      - 110 -
         
         
            
               Пример.
            
               #include 
            
               char far *p;
               unsigned int seg_val;
               unsigned int off_val;
               .
               .
               .
               seg_val=FP_SEG(p);
               off_val=FP_OFF(p);
                

                                     
               _FPRESET
            
               #include 
               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 
               #include 
               #include 
               #include 

                                      - 111 -
         
         
            
               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);
               }

               FPRINTF
            
               #include 
            
               int fprintf (stream, format-string [, argument ...]);
            
               FILE *stream; указатель на структуру FILE.
                                           
               char *format-string; строка управления форматом.
            
               Описание:
                                             
               Функция fprintf форматирует и печатает в выходной поток на-
         боры символов и значений. Каждый аргумент (если он есть) преобра-
         зуется и выводится согласно заданной спецификации формата в стро-
         ке формата. Строка формата (format-string) обладает той же формой
         и функцией, что и аргумент строки формата функции printf.
            
               Возвращаемое значение:
            
               Эта функция возвращает количество напечатанных символов.
               См. также cprintf, fscanf, printf, sprintf.
            
               Пример.
            
               #include 
               
               FILE *stream;
               int i = 10;

                                      - 112 -
         
         
               double fp = 1.5;
               char *s = "это строка";
               char c = '\n';
            
               stream = fopen("result", "w");
            
               /* форматирование и печать различных данных */
            
               fprintf (stream, "%s%c", s, c);
               /* печать выражения "это - новая строка", а  затем  символа
         новой строки */
            
               fprintf (stream, "%d\n", i);
               /* печать числа 10, а затем символа новой строки */
            
               fprintf (stream, "%f", fp);
               /* печать числа 1.500000 */
            
            
               FPUTC-FPUTCHAR.
                                                    
               #include 
               int fputc (c, stream); записывает символ в поток stream.
               int c; записываемый символ.
            
               FILE *stream; указатель на структуру FILE.

               int fputchar (c); записывает символ в поток stdout.
               int c; записываемый символ.
            
            
               Описание:
            
               Функция  fputc  записывает  отдельный символ "с" в выходной
         поток stream. Функция fputchar является эквивалентной  к  функции
         fputc(c, stream).
            
               Возвращаемое значение:
            
               Эти  обе функции возвращают записанный символ. Возвращаемое
         значение EOF свидетельствует об ошибке; однако, поскольку  значе-
         ние  EOF является также истинным целым значением, то для проверки
         соглашений об ошибке используют функцию ferror.
               
               Замечание! Процедуры fputc  и  fputchar  идентичны  putc  и
         putchar, но они являются функциями, а не макро.
               См. также fgetc, fgetchar, putc, putchar.
            
               Пример.
            
               #include 
            
               FILE *stream;
               char buffer[81];
               int i;

                                      - 113 -
         
         
               int ch;

                                     
               .
               .
               .
               /*  Следующие  операторы записывают содержимое буфера в по-
         ток. Заметим, что вывод представлен как  побочный  эффект  внутри
         второго выражения, а также тело оператора пусто. */
            
               for (i = 0; (i < 81) &&
                 ((ch = fputc(buffer[i], stream)) != EOF); i++)
                            ;
            
               /*  В  приведенном выше операторе для записи буфера в поток
         stdout можно было бы использовать вместо "fputc (stream)" функцию
         "fputchar ()".*/
                                          
               
               FPUTS
            
               #include 
               int fputs  (string,  stream);  записывает  строкe  в  поток
         stream.
               char *string; выводимая строка.
               FILE *stream; указатель на структуру FILE.
                                                                                                                   
               Описание:
                                                                
               Функция  fputs копирует строку в конец потока stream. Нуле-
         вой символ окончания '\0' не копируется.
            
               Возвращаемое значение:
            
               Функция fputs возвращает последний записанный символ.  Если
         вводимая  строка string пустая, возвращается значение 0. Значение
         EOF свидетельствует об ошибке.
               См. также fgets, gets, puts.
            
               Пример.
            
               #include 
                                                                  
               FILE *stream;
               int result;
               .
               .
               .
               /* Следующий оператор записывает строку в поток */
            
               result = fputs("файл данных должен быть обновлен\n",stream).




                                      - 114 -
               
               FREAD
         
         
               #include 
               int fread (buffer, size, count, stream);
            
               char *buffer; память для размещения данных.
               int size; размер в байтах.
               int count; максимальное число объектов для чтения.
            
               FILE *stream; указатель на структуру FILE.
                                                                
               Описание:
            
               Данная функция читает  объекты  размера  size  по  счетчику
         count из входного потока stream и располагает их в буфере buffer.
         Указатель  на  файл,  связанный  с потоком stream (если он есть),
         увеличивается на число прочитанных байтов. Если  выбранный  поток
         открыт  в  текстовом  режиме,  комбинация "ВК - ПС" заменяется на
         символ "ПС". Эта замена не влияет ни на указатель на файл, ни  на
         возвращаемое значение.
            
               Возвращаемое значение:
            
               Функция  fread  возвращает  число действительно прочитанных
         объектов, которое меньше, чем count,  если  при  чтении  возникла
         ошибка или встретился конец файла.
               См. также fwrite, read.
            
               Пример:
            
               #include 
                                                               
               FILE *stream;
               long list[100];
               int numread;
            
               stream = fopen("data", "r+b");
            
               /*  следующий оператор позволяет считать 100 двоичных длин-
         ных целых из потока stream */
            
               numread = fread((char *)list, sizeof(long), 100, stream);.

            
               FREE
            
               #include  требуется только для объявления функции.
            
               void free(ptr);
               char *ptr; указатель на захваченный блок памяти.
            
               Описание:
            
               Функция free освобождает блок памяти. Аргумент ptr указыва-
         ет на ранее захваченный блок памяти  посредством  вызова  calloc,
         malloc,  realloc. Числом освобожденных байтов является число бай-
         тов, определенных при захвате блока (или перезахвате). После  вы-

                                      - 115 -
         
         
         зова освободившийся блок доступен для захвата.
            

               Возвращаемое значение:
            
               Возвращаемого значения нет.
               См.также calloc, malloc, realloc.
            
               Замечание!  Попытка  освободить  неверный ptr (указатель не
         захватывается посредством вызова calloc, malloc или realloc)  мо-
         жет привести к следующему захвату и вызвать ошибку.
            
               Пример.
            
               #include 
               #include 
            
               char *alloc;
            
               /* захватывает 100 байтов и освобождает их */
            
               if ((alloc=malloc(100))==NULL
            
               /* проверяет на правильность указателя */
            
               printf("unable to allocate memory\n");
               else {
               .
               .
               .
               free(alloc);
            
               /* освобождает память для heap */
            
               }
            
            
               _FREECT
            
               #include    требуется только для объявления функ-
         ции.
            
               unsigned int _freect(size);
               unsigned int size; размер объекта в байтах.
            
            
               Описание:
            
               Функция _freect сообщает о количестве памяти, пригодной для
         размещения динамической памяти, и возвращает приблизительное  ко-
         личество вызовов в программе malloc для размещения объекта задан-
         ного размера в умалчиваемом сегменте данных.
            
            

                                      - 116 -
               
               
               Возвращаемое значение:
         
               Функция _freect возвращает число  вызовов  как  беззнаковое
         целое.
               См.также calloc, _expand, malloc, _memavl, _msize, realloc.
            
            
               Пример.
            
               main()
               {
               int i;
               printf("Approximate # of times program can call
                     malloc\n");
               printf("to allocate a single integer=%u\n\n",
                     _freect(sizeof(int)));
            
               /*  вызывает 1000 раз malloc, размещая каждый раз отдельное
         целое */
            
               for (i=0; i<1000; ++i)
               malloc(sizeof(int));
            
               printf("Approximate # of times program can call
                     malloc\n");
               printf("to allocate a single integer=%u\n",
                     _freect(sizeof(int)));
            
               }
            
            
               FREOPEN
            
               #include 
               FILE *freopen (pathname, type, stream);
            
               char *pathname; path-имя нового файла.
               char *type; разрешенный тип доступа.
                                                               
               FILE *stream; указатель на структуру FILE.
                                                               

               Описание:
                                                               
               Функция freopen закрывает текущий файл, связанный с потоком
         stream, и переназначает этот поток в файл, определяемый path-име-
         нем. Эта функция обычно применяется для переадресации  предоткры-
         тых  потоков stdin, stdout, stderr, stdaux, stdprn в файлы, опре-
         деляемые пользователем. Новый файл, связанный с потоком, открыва-
         ется в режиме type, который определен следующим образом:

      
            ТИП                   ОПИСАНИЕ
                                                            
            "r"          открыть файл для чтения.(Этот файл должен
                         существовать).
                                                            

                                      - 117 -
         
         
            "w"          открыть пустой файл для записи; если этот
                         файл  ранее  существовал,  его содержимое
                         уничтожается.
                         
            "a"          открыть файл для  записи  (добавления)  в
                         конец. Если данного файла нет, то вначале
                         он создается.
                         
            "r+"         открыть файл одновременно  для  чтения  и
                         записи. Файл должен существовать.
                         
            "w+"         открыть  пустой файл для чтения и записи.
                         Если этот  файл  ранее  существовал,  его
                         сожержимое уничтожается.
                         
            "a+"         открыть  файл  для  чтения и  добавления.
                         Если файла нет, вначале он создается.
            
               Замечание! Нужно внимательно применять  режимы  "w",  "w+",
         так как они могут уничтожить существующие файлы.
            
               Если файл открыт при помощи типа "a" или "a+", все операции
         записи выполняются в конец файла. При использовании функций fseek
         или rewind  возможно перепозиционирование указателя на файл; нес-
         мотря  на это, указатель на файл перед выполнением любых операций
         записи всегда возвращается в конец файла. Таким образом,  сущест-
         вующие  данные  не  будут  перезаписаны.  При использовании типов
         "r+', "w+", "a+" допускается одновременно чтение и запись. (Гово-
         рится, что файл открывается для обновления). Поэтому  при  перек-
         лючении  чтения  на запись и наоборот  нужно использовать функции
         fseek или rewind. Для функции  fseek  (при  необходимости)  может
         быть точно определена текущая позиция.
               Дополнительно  к  значениям, описанным выше, может быть до-
         бавлен в строке type один из следующих символов, чтобы специфици-
         ровать способ преобразования символа новой строки.
            
            Символ               Значение
            
              t          открыть   в   текстовом   (преобразующем)
                         режиме;  при  вводе  комбинация  "Возврат
                         каретки      -      перевод       строки"
                         преобразовывается к единственному символу
                         "перевода  строки".  При  выводе   символ
                         перевода   строки   преобразовывается   в
                         комбинацию ВК-ПС.
                         
              b          открыть   в   двоичном  (непреобразующем)
                         режиме; выше описанные преобразования  не
                         осуществляются.
                         
               Если t или b в строке type не задается, режим  преобразова-
         ния  определяется переменной _fmode и режимом, устанавливаемым по
         умолчанию.
            
            

                                      - 118 -
         
         
               Возвращаемое значение:
            
               Функция freopen  возвращает  указатель  на  вновь  открытый
         файл.  Если  возникла ошибка, прежний файл закрывается  и функция
         возвращает значение указателя NULL.
               См. также fclose, fcloseall, fdopen, fileno,  fopen,  open,
         setmode.
            
               Пример.
            
               #include 
            
               FILE *stream;
               .
               .
               .
               /* следующий оператор закрывает поток stdout и переназнача-
         ет этот поток указателю потока. */
            
               stream = freopen ("data2", "w+", stdout);.
                                                                
               
               FREXP
            
               #include 
            
               double frext(x,expptr);
               double x; значение с плавающей точкой.
               int *expptr; указатель на целую экспоненту.
            
               Описание:
            
               Функция  frexp  разрывает  значение с плавающей точкой x на
         мантиссу m и экспоненту n, так что абсолютное значение  m  больше
         или  равно 0.5 и меньше 10 и x равен m, умноженную на 2 в степени
         n. Целое значение экспоненты n хранится в расположении, указанном
         по expptr.
            
            
               Возвращаемое значение:
           
               Функция frext возвращает мантиссу m. Если x равен 0,  функ-
         ция  возвращает 0 для мантиссы и экспоненты. Возвращаемого значе-
         ния в случае ошибки нет.
               См.также ldex, modf.
            
               Пример.
            
               #include 
            
               double x,y;
               int n;
               .
               .
               .

                                      - 119 -
         
         
               x = 16.4;
               /* y будет равен .5125, n будет равно 5 */
               y = frexp(x,&n);
            
            
               FSCANF.
            
               #include 
               int fscanf (stream, format-string [, argument ...]);
                                                                  
               FILE *stream; указатель на структуру FILE.
               char *format-string; строка управления форматом.
                                                                  
               Описание:
            
               Функция fscanf считывает данные из текущей  позиции  потока
         stream  в место, определяемое заданием аргументов arguments (если
         они есть).
               Каждый аргумент должен быть указателем на переменную и тип,
         которые соответствуют типу, заданному в  строке  формата.  Строка
         формата  управляет интерпретацией полей ввода и имеет ту же самую
         форму и назначение, что и аргумент  строки  формата  для  функции
         scanf. (Описание функции scanf приводится ниже в данной части ру-
         ководства).

                                     
               Возвращаемое значение:
            
               Данная  функция  возвращает  число удачно преобразованных и
         правильно назначенных полей. Возвращаемое  значение  не  включает
         полей,  прочитанных,  но  не  назначенных. При попытке считывания
         конца файла  возвращается значение EOF. Возвращаемое  значение  0
         обозначает, что нет назначенных полей.
               См. также cscanf, fprintf, scanf, sscanf.
            
            
               Пример.
            
               #include 
            
               FILE *stream;
               long l;
               float fp;
               char s[81];
               char c;
            
               stream = fopen ("data", "r");
               .
               .
               .
               /* ввод различных данных */
            
               fscanf (stream, "%s", s);
            
               fscanf (stream, "%c", &c);

                                      - 120 -
         
         
            
               fscanf (stream, "%ld", &l);
            
               fscanf (stream, "%f", &fp);.
            
            
               FSEEK.

               #include 
               int fseek (stream, offset, origin);
                                                                                                                      
               FILE *stream; указатель на структуру FILE.
                                                                
               long offset; число байтов от origin.
               int origin; начальная позиция.
                                                                                                                      
               Описание:
                                                                
               Функция  fseek перемещает указатель, соответствующий потоку
         stream, на новое  место  расположения,  отстоящее  от  origin  на
         offset  байтов. Следующая операция в потоке выполняется над новым
         месторасположением.
               Если поток открыт для обновления,  то  следующей  операцией
         будет либо чтение, либо запись.
               Аргумент origin может быть одной из следующих констант, оп-
         ределенных в .
            
                
            ORIGIN                ОПРЕДЕЛЕНИЕ
          (источник, начало)
            
            SEEK-SET              начало файла.
            
            SEEK-CUR              текущая позиция указателя на
                                  файл.
            
            SEEK-END              конец файла.

               Функция  fseek используется для перемещения указателя в лю-
         бое место файла. Указатель может быть также  размещен  за  концом
         файла.  Однако,  попытка  расположить  указатель до начала  файла
         приведет к ошибке.
            
               Возвращаемое значение:
            
               Функция fseek возвращает значение 0, если указатель успешно
         перемещен. В случае ошибки  возвращается любое  ненулевое  значе-
         ние.  Для  устройств, не совместимых с операцией seek, (таких как
         терминал и печать), возвращаемое значение неопределено.
               См. также ftell, lseek, rewind.
               
               Замечание! Для потоков, открытых в  текстовом  (преобразую-
         щем)  режиме, применение fseek является ограниченным, т.к. комби-
         нации ВК - ПС могут стать причиной выработки непредвиденного  ре-
         зультата.

                                      - 121 -
         
         
               Ниже приведены операции (действия) fseek, гарантирующие ра-
         боту с потоками, открытыми в текстовом режиме:
               * смещение origin на величину offset, равную нулю;
            
               *  смещение  от начала файла на значение offset, полученное
         после вызова функции ftell.
            
               Пример.
            
               #include 
            
               FILE *stream;
               int result;
            
               stream = fopen("data", "r");
               .
               .
               .
               /* следущий оператор возвращает указатель на файл к  началу
         файла */
            
               result = fseek(stream, 0L, SEEK_SET);.
            
            
               FSTAT
            
            
               #include 
               #include 

               int fstat(handle,buffer);
               int handle; handle-р, ссылающийся на открытый файл.
               struct  stat  *buffer; указатель на структуру хранения  ре-
         зультатов.
            
               Описание:
            
               Функция  fstat  получает информацию об открытом файле, свя-
         занным с данным handle-ром, и запоминает ее в структуре, на кото-
         рую указывает buffer. Структура,  тип  stat  которой  объявлен  в
         , содержит следующие поля:
            

           Поле                              Значение
                                 
         st_mode           Битовая маска для информации  о  режиме
                           файла. Бит  S_IFCHR    устанавливается,
                           если  handle  ссылается на  устройство.
                           Бит    S_IFREG   устанавливается,  если
                           handle ссылается на обычный файл.  Биты
                           чтения/записи  пользователей устанавли-
                           ваются  соответственно  режиму  доступа
                           для файла.
            
         st_dev            Либо номер устройства диска,содержащего

                                      - 122 -
         
         
                           файл,  либо  handle - в  случае другого
                           устройства.
                           
         st_rdev           Либо номер устройства диска,содержащего
                           файл,  либо  handle - в  случае другого
                           устройства
                           (аналогично st_dev).
                           
         st_nlink          Всегда 1.
                           
         st_size           Размер файла  в байтах.

         st_atime          Время последней модификации файла.
                           
         st_mtime          Время последней модификации файла
                           (аналогично st_atime).
                           
         st_ctime          Время последней модификации файла
                           (аналогично st_atime и st_mtime).
                           
      
               В  структуре  типа stat существуют три дополнительных поля,
         которые для MS DOS не имеют смысла.
            
               Возвращаемое значение:
            
               Функция fstat возвращает значение 0, если информация о ста-
         тусе файла получена. Возвращаемое значение -1 свидетельствует  об
         ошибке;  в  этом  случае errno устанавливается в EBADF, определяя
         тем самым неверный файловый handle.
               См.также access, chmode, filelength, stat.
            
               Замечание! Если заданный handle  ссылается  на  устройство,
         поля размера и времени в структуре stat не имеют смысла.
            
               Пример.
            
               #include 
               #include 
               #include 
               #include 
            
               struct stat buf;
               int fh, result;
            
               fh=open("tmp/data", O_RDONLY);
               .
               .
               .
               result=fstat(fh,&buf);
            
               if (result==0)
                   printf("file size is %ld\n",buf.st_size);
         
               

                                      - 123 -
         
         
               FTELL
           
               #include 
            
               long ftell (stream);
               FILE *stream; указатель на структуру FILE.
      
               Описание:
      
               Функция  ftell  получает  текущую позицию указателя на файл
         (если он есть), связанного с потоком stream.  Позиция  выражается
         как смещение offset от начала потока stream.
            
               Возвращаемое значение:
            
               Эта  функция  возвращает  текущую  позицию. В случае ошибки
         возвращается значение -1L. Для устройств, не совместимых с опера-
         цией seek (таких как терминалы и печать), или когда поток  stream
         не  ссылается на открытый файл, возвращаемое значение неопределе-
         но.
               См. также fseek, lseek, tell.
            
               Замечание! Значение, возвращаемое fteel, физически не отра-
         жает байтового смещения offset для потока, открытого в  текстовом
         режиме,  т.к. текстовый режим преобразует комбинации ВК - ПС. Ис-
         пользуйте функцию ftell вместе с fseek, чтобы корректно запомнить
         и восстановить месторасположения указателя на файл.
      
               Пример.
            
               #include 
                                                                
               FILE *stream;
                                                                
               long position;
            
               stream = fopen ("data", "rb");
               .
               .
               .
               position = fteel(stream);.
            
            
               FTIME
            
               #include 
               #include 
            
               void ftime(timeptr);
               struct timeb *timeptr; указатель на структуру, описанную  в
         .
            
               Описание:
            
               Функция  ftime  высвечивает  текущее  время  и хранит его в

                                      - 124 -
         
         
         структуре, на которую указывает timeptr. Структура timeb  описана
         в  . Она  содержит  4  поля: time, millitm, timezone,
         dstflag, которые имеют следующие значения:
            
            ПОЛЕ                             ЗНАЧЕНИЕ
            
            time                Время,  в  секундах,  прошедшее от
                                значения   00:00:00   времени   по
                                Гринвичу, т.е. с 1января 1970 г.
                                
            millitm             Сотая доля секунды.
                                
            timezone            Разность  в минутах (в направлении
                                к западу) между значением  времени
                                по  Гринвичу  и  местным временем.
                                Значение  timezone определяется из
                                значения timezone (см. tzset).
                                
            dstflag             Ненулевое  значение,   если   зона
                                перехода  на  зимнее/летнее  время
                                присутствует   в   зоне   местного
                                времени,  которое  определяется из
                                значения   глобальной   переменной
                                daylight ( см. tzset.)
                                
                                
               Возвращаемое значение:
            
               Функция ftime задает значения полей структуры, определенной
         по timeptr. Возвращаемого значения нет.
               См. также asctime, ctime, gmtime, localtime, time, tzset.
               Пример.
            
               #include 
               #include 
               #include 
               #include 
            
               main()
               {
               struct timeb timebuffer;
               char *timeline;
               time(&timebuffer);
            
               timeline = ctime(&(timebuffer, time));
            
               printf ("The time is %.19s.%hu %s",
                        timeline,   timebuffer.millitm,
                        &timeline[20]);
               }
            
               На выходе будет следующая информация:
            
               The time is Wed Dec 04 17:58:29.420 1985.
                          

                                      - 125 -
         
         
               
               FWRITE
            
               #include 
            
               int fwrite(buffer, size, count, stream);
               char *buffer; указатель на записываемые данные.
               int size; размер элемента в байтах.
               int count; максимальное число записываемых элементов.
               FILE *stream; указатель на структуру типа FILE.
            
               Описание:
            
               Функция fwrite записывает элементы  count  длиной  size  из
         buffer  в  выходной поток stream. Указатель на файл, связанный со
         stream, увеличивается на число записанных байтов.
               Если заданный stream открыт в текстовом режиме, каждый воз-
         врат каретки заменяется парой "Возврат каретки - перевод строки".
         Для возвращаемого значения такая замена не выполняется.
            
               Возвращаемое значение:
            
               В случае ошибки, т.е. если число полностью записанных  эле-
         ментов  меньше,  чем  count,  тогда функция fwrite возвращает это
         число.
               См. также fread, write.
            
               Пример.
            
               #include 
            
               FILE *stream;
               long list[100];
               int numwritten;
            
               stream = fopen("data", "r+b");
               .
               .
               .
               /* следующий оператор записывает 100 длинных целых в  поток
         в двоичном формате */
            
               numwritten   =   fwrite((char  *)list,  sizeof(long),  100,
         stream);.
               
               
               GCVT
            
               #include  требуется только для объявления функций.
            
               char gcvt(value, ndec, buffer);
               double value; преобразуемое значение.
               int ndec; количество запоминаемых значащих цифр.
            
               char *buffer; память для хранения результата.

                                      - 126 -
         
         
           
               Описание:
                                 
               Функция gcvt преобразовывает значение  с  плавающей  точкой
         value  в  символьную  строку  и  запоминает  эту  строку в буфере
         buffer. Буфер buffer должен быть достаточно большим,  чтобы  смог
         разместить  преобразованное  значение  вместе  с нулевым символом
         окончания '\0', который добавляется автоматически. Переполнение не
         контролируется.
               Функция  gcvt пытается обработать ndec значащих цифр в фор-
         мате FORTRAN F. Если это не удается,  она  обрабатывает  значащие
         цифры в формате FORTRAN E. При преобразовании ведущие нули подав-
         ляются.
            
               Возвращаемое значение:
            
               Функция  gcvt возвращает указатель на строку цифр. В случае
         ошибки  нет возвращаемого значения.
               См. также atof, atoi, atol, ecvt, fcvt.
            
               Пример:
            
               #include 
            
               char buffer[50];
               int precision = 7;
            
               /* в буфере содержится "-314150.0" */
            
               gcvt (-3.1415e5, precision, buffer);.
            

               GETC - GETCHAR
            
               #include 
                                                                  
               int getc (stream); читает символ из потока stream.
                                                                  
               FILE *stream; указатель на структуру FILE.
                                                                  
               int getchar(); читает символ из stdin.
                                                                  
               Описание:
            
               Макро getc читает отдельный символ из текущей позиции пото-
         ка stream и изменяет соответствующий указатель на файл для указа-
         ния следующего символа. Макро getchar идентична getc(stdin).

                                     
               Возвращаемое значение:
            
               Макро getc и getchar возвращают прочитанный символ. Возвра-
         щаемое значение EOF свидетельствует об ошибке или об условии дос-
         тижения конца файла. Для определения категории ошибки используют-
         ся функции ferror или feof.

                                      - 127 -
         
         
               См. также fgetc, fgetchar, getch,  getche,  putc,  putchar,
         ungetc.
               
               Замечание!   Процедуры   getc,   getchar  идентичны  fgetc,
         fgetchar, но они являются макро, а не функциями.
            
               Пример.
            
               #include 
            
               FILE *stream;
               char buffer[81];
               int i, ch;
               .
               .
               .
               /* следующие операторы позволяют выбирать требуемую  вводи-
         мую строку из stdin */
            
               for (i = 0; (i < 80) && ((ch = getchar ()) != EOF) &&
                  (ch != '\n'); i++)
                  buffer [i] = ch;
                  
               buffer[i] = '\0';
            
               /*  для ввода строк из потока stdin в операторах, приведен-
         ных выше, можно вместо "getchar ()"  использовать  "getc(stdin)".
         */
                
               
               GETCH
            
               #include  требуется только для объявления функции.
            
               int getch();
            
               Описание:
            
               Функция  getch  читает без эхо-отображения отдельный символ
         прямо  с  консоли.  Напечатанные  (введенные)  символы  не  имеют
         эхо-отображения.  Если  введен  CONTROLL-C, система выполняет INT
         23H.
            
               Возвращаемое значение:
      
               Функция getch возвращает прочитанный символ.  Возвращаемого
         значения в случае ошибки нет.
               См.также cgets, getche, getchar.
            
            
               Пример.
            
               #include 
               #include 
            

                                      - 128 -
         
         
               int ch;
            
               /*  в этом цикле берутся символы с клавиатуры, пока не вст-
         ретится "не пробельный" символ.  Предшествующие  символы  пробела
         отбрасываются. */
            
            
               GETCHE
            
               #include  требуется только для объявления функции.
      
               int getche ();
            
               Описание:
            
               Функция  getche читает отдельный символ с консоли и выраба-
         тывает эхо для прочитанного символа.  Если  вводится  CONTROLL-C,
         система выполняет INT 23H (выход по CONTROLL-C).
            
               Возвращаемое значение:
            
               Функция  getche возвращает символ. Возвращаемого значения в
         случае ошибки нет.
               См.также cgets, getch, getchar.
            
               Пример.
            
               #include 
               #include 
            
               int ch;
            
               /* берет символ с клавиатуры, вырабатывает его  эхо-отобра-
         жение  на консоли. Если это символ верхнего регистра, преобразует
         его к символу нижнего регистра и записывает старый символ */.
            
               ch = getche();
            
               if (isupper (ch))
                  cprintf ("\b%c", _tolower(ch));
               
               
               GETCWD

            
               #include  требуется только для  объявления  функ-
         ции.
            
            
               char *getcwd(pathbuf,n);
               char *pathbuf; память для path-имени.
               int n; максимальная длина path-имени.
            
            

                                      - 129 -
                             
               
               Описание:
         
               Функция  getcwd  получает полное path-имя текущего рабочего
         директория и запоминает его в pathbuf. Целый аргумент n определя-
         ет максимальную длину для path-имени. Возникает ошибка, если дли-
         на path-имени, включая нулевой символ окончания, превышает n.
               Аргумент pathbuf может быть NULL; буфер  размером  n  будет
         автоматически  захватываться  посредством malloc и использоваться
         для хранения path-имени. Этот буфер позже может  быть  освобожден
         при  использовании возвращаемого значения функции getchar (указа-
         тель на захваченный буфер) посредством функции free.
            
               Возвращаемое значение:
            
               Функция getcwd возвращает  pathbuf.  Возвращаемое  значение
         NULL свидетельствует об ошибке  и errno устанавливается в одно из
         следующих значений:
            
         Значение                      Его смысл
            
         ENOMEM               Памяти недостаточно для размещения    n
                              байт  (когда  аргумент  NULL  задан как
                              pathbuf).
                           
         ERANGE               Path-имя длинее, чем n символов.
            
               См.также chdir, mkdir, rmdir.
            
               Пример.
            
               #include 
               #include 
            
               char buffer [51];
            
               /*  следующий  оператор записывает имя текущего рабочего **
         директория (длиной до 50 символов) в буфер */
            
               if (getcwd(buffer,50)==NULL)
                   perror("getcwd error");
      
      
               GETENV.
            
               #include  требуется только для  объявления  функ-
         ции.
            
               char *getenv(varname);
               char *varname; имя переменной окружения.
            
               Описание:
            
               Функция  getenv возвращает указатель на значение переменной
         окружения для соответствующего имени varname этой переменной. Пе-
         ременные окружения определяют окружение,  в  котором  выполняется
         процесс  (например,  поиск  path для библиотек, которые линкуются
         вместе с программой).

                                      - 130 -
         
         
            
               Возвращаемое значение:
            
               Функция getenv возвращает указатель  на  значение  (строку)
         переменной  окружения, содержащую текущее зачение строки varname.
         Возвращается значение NULL, если заданная переменая в текущий мо-
         мент не определена.
               См. также putenv.
            
               Замечание! Запись в таблице переменных окружения непосредс-
         твенно не может быть изменена. Если запись  нужно  изменить,  ис-
         пользуется функция putenv. Чтобы модифицировать возвращаемое зна-
         чение и при этом не затронуть таблицу переменных окружения, нужно
         использовать функции strdup или strcpy, которые позволяют копиро-
         вание строки.
               Функции  getenv  и  putenv используют глобальную переменную
         environ для  доступа  к  таблице  переменных  окружения.  Функция
         putenv  может  изменять  значение environ, делая недействительным
         аргумент "envp" для функции "main".
            
               Пример.
            
               #include 
            
               char *pathvar;
            
               /* следующий оператор получает значение переменной  окруже-
         ния PATH */
            
               pathvar = getenv("PATH");
            
               /* Если в окружении есть запись "PATH  =  A:\BIN;  B:\BIN",
         то указатель pathvar будет ссылаться на "A:\BIN; B:\BIN". Если пе-
         ременной окружения PATH нет,указатель pathvar будет равен NULL.*/
            
      
               GETPID
            
               #include   требуется только для объявления функ-
         ции.
               int getpid();
            
               Описание:
            
               Функция getpid возвращает  идентификатор  процесса  (номер)
         ID, который уникально определяет вызываемый процесс.
            
               Возвращаемое значение:
            
               Функция  getpid возвращает идентификатор процесса ID. Возв-
         ращаемого значения в случае ошибки нет.
               См.также mktemp.
            
            

                                      - 131 -
         
               Пример.
         
               #include 
               #include 
               #include 
            
               char filename[9], pid[5];
               .
               .
               .

               strcpy(filename, "FILE");
               strcat(filename, itoa(getpid(), pid, 10));
            
               /* печатается "FILExxxxx", где xxxxx является **  идентифи-
         катором процесса id */
            
               printf("File name is %s\n", filename);
            
            
               GETS
            
               #include 
                                                                  
               char *gets(buffer);
               char *buffer; память для хранения вводимой строки.
                                                                  
               Описание:

               Функция  gets  читает  строку  из потока стандартного ввода
         stdin и запоминает ее в буфере buffer. Строка состоит  из  набора
         символов и заканчивается символом новой строки '\n'. Перед возвра-
         том функция gets замещает символ новой строки символом '\0', в от-
         личии от функции fgets, которая сохраняет символ новой строки.
            

               Возвращаемое значение:
            
               Функция  возвращает  свой аргумент. Значение указателя NULL
         свидетельствует об ошибке или достижении конца файла. Для опреде-
         ления категории ошибки используются функции ferror или feof.
               См. также fgets, fputs, puts.
            

               Пример.
            
               #include 
                                                                  
               char line[100];
               char *result;
            
               /* следующий оператор выбирает строку из потока stdin */
            
               result = gets(line);.
            
            

                                      - 132 -
         
         
               GETW
               
               
               #include 
            
               int getw (stream);
            
               FILE *stream; указатель на структуру FILE.
                                                                                                                       
               Описание:
      
               Функция getw читает двоичное значение типа int из специаль-
         ного потока stream и изменяет соответствующий указатель  на  файл
         (если  он есть), чтобы указать на следующий непрочитанный символ.
         Эта функция не предполагает специального выравнивания объектов.
     
            
               Возвращаемое значение:
            
               Эта функция возвращает считанное целое значение. Возвращае-
         мое значение EOF свидетельствует об ошибке или о достижении конца
         файла; однако, значение EOF может быть воспринято как целая вели-
         чина, поэтому для проверки конца файла или условия ошибки исполь-
         зуются функции ferror и feof.
               См. также putw.
               
               Замечание! Функция getw обеспечивает совместимость с преды-
         дущими библиотеками. Необходимо заметить, что проблемы  переноси-
         мости  могут возникать вместе с getw, если в системах различаются
         размеры int и порядок байтов внутри int.

               Пример.
            
               #include 
               #include 

               FILE *stream;
               int i;
               .
               .
               .
               /* следующий оператор считывает слово из  потока  stream  и
         проверяет наличие ошибки */
            
               i = getw(stream);

               if (ferror(stream))
               { fprintf(stderr, "getw failed\n");
               clearerr (stream);
               }.
                   
               
               GMTIME
            
               #include 
                
               struct tm *gmtime(time);

                                      - 133 -
         
         
               long *time; указатель на хранимое время.
            
            
               Описание:
            
               Функция  gtime  преобразует время, хранимое как long-значе-
         ние, к структуре. Long-значение time представляет  секунды,  про-
         шедшие  от 00:00:00 значения времени по Гринвичу, т.е. с 1 января
         1980 года. Это значение обычно получается из вызова функции time.
               Функция gmtime разрывает  значение  time  и  хранит  его  в
         структуре  типа tm, объявленной в . Результат в структуре
         отражает значение времени по Гринвичу, а не местное время.
            
               Поля в структуре типа tm хранят следующие значения:
            
              Поле                Хранимое значение
            
            tm_sec           Секунды
            
            tm_min           Минуты
            
            tm_hour          Часы (от 0 до 24)

            tm_mday          День месяца (от 1 до 31)

            tm_mon           Месяцы (от 0 до 11; январь=0)

            tm_year          Год (текущий год минус 1900)
            
            tm_wday          День недели (от 0 до 6;
                             воскресенье = 0)
            
            tm_yday          День года (от 0 до 365;
                             1 января = 0)
            
            tm_isdst         Ненулевое значение, если  осуществлен
                             переход на летнее/зимнее время, иначе
                             0.

               В MS DOS даты раньше 1980 года  не  понимаются.  Если  time
         представляет  дату  ранее  1  января 1980 года, gmtime возвращает
         символьную строку, представленную 00:00:00 January 1,1980.
               Возвращаемое значение:
            
               Функция gmtime возвращает указатель на результат,  хранимый
         в структуре. Возвращаемого значения в случае ошибки нет.
               См.также asctime, ftime, ctime, localtime, time.
           
               Замечание! Функции gmtime и localtime используют один и тот
         же  статистически захваченный буфер для хранения в нем строки ре-
         зультата. Каждый вызов одной из этих процедур уничтожает  резуль-
         тат предыдущего вызова.

            

                                      - 134 -
         
               Пример.
         
               #include 
            
               struct tm *newtime;
               long ltime;
            
               time(<ime);
               newtime=gmtime(<ime);
               printf("Greenwich mean time is %s\n",
                       asctime(newtime));
               
               
               HALLOC
            
               #include    требуется только для объявления функ-
         ции.
            
               char huge *halloc(n,size);
               long n; число элементов.
               unsigned size; длина каждого элемента в байтах.
            
               Описание:
            
               Функция halloc захватывает память  для  huge-массива  из  n
         элементов,  каждый длиной size байтов. Каждый элемент инициализи-
         рован в 0.
               Если размер массива меньше чем 128, то размер элемента мас-
         сива должен быть степенью 2.
            
               Возвращаемое значение:
            
               Функция halloc возвращает char-huge указатель на  захвачен-
         ное пространство.
               В  памяти,  на которую указывает возвращаемое значение, га-
         рантировано выравнивание для хранения любого типа объекта.  Чтобы
         получить  указатель на тип, отличный от char, используется преоб-
         разователь типа  возвращаемого  значения.  Возвращаемое  значение
         равно NULL, если осталось недостаточно памяти.
               См.также calloc, free, hfree, malloc, realloc.
            
               Пример.
            
               #include 
            
               long huge *lalloc;
               .
               .
               .
            
               /*  захватывает пространство, достаточное для 80000 длинных
         целых, и инициализирует их в 0 */
            
               lalloc=(long huge*)halloc(80000L,sizeof(long));
            
            
      

                                      - 135 -
         
         
                                     
           
               HFREE
           
               #include  требуется только для  объявления  функ-
         ции.
            
               void hfree(ptr);
               char huge *ptr; указатель на захваченный блок памяти.
            
               Описание:
            
               Функция  hfree освобождает блок памяти. Аргумент ptr указы-
         вает на ранее захваченный блок памяти посредством вызова halloc.
               Числом освобожденных байтов является число байтов,  опреде-
         ленных  при захвате блока. После вызова освободившиеся блоки при-
         годны к размещению.
            
               Возвращаемое значение:
            
               Возвращаемого значения нет.
               См.также halloc.
            
               Замечание! Попытка освободить неверный  ptr  (указатель  не
         захватывается  посредством вызова halloc) может привести к после-
         дующему захвату и вызвать ошибку.
            
               Пример.
            
               #include 
               #include 
            
               char huge *alloc;
            
               /* захватывает 80000 байтов и освобождает их */
            
               alloc=halloc(80000L, sizeof (char));
               .
               .
               .
               if (alloc !=NULL)
            
               /* проверяет на правильность указателя */
            
               hfree(alloc);
            
               /* освобождает память для heap */
            
.
                                      - 136 -
         
            

               HYPOT
            
               #include 

               double hypot(x,y);
               double x,y; значение с плавающей точкой.
            
               Описание:
                
               Функция hypot  вычисляет  длину  гипотенузы  прямоугольного
         треугольника с заданной длиной двух сторон x и y. Вызов hypot эк-
         вивалентен следующему:
               sqrt(x*x + y*y);
            
            
               Возвращаемое значение:
            
               Функция  hypot  возвращает длину гипотенузы. В случае пере-
         полнения результата, hypot устанавливает errno в ERANGE и возвра-
         щает значение HUGE.
               См.также cabs.
            
               Пример.
            
               #include 
            
               double x,y,z;
            
               x = 3.0;
               y = 4.0;
               z = hypot(x,y);
               printf("Hypotenuse=%2.1f\n",z);
            
               На выходе:
                
               Hypotenuse = 5.0
                
.
         
         


Яндекс цитирования