Latest web development tutorials
×

C курс

C Язык учебника C Краткое введение C параметры окружающей среды C Структура программы C Базовый синтаксис C Типы данных C переменная C постоянная C Storage Class C операторы C судья C циркуляция C функция C Обзорное правила C массив C указатель C строка C структура C союз C поле Bit C typedef C Входной и Выходной C грамотность документов C препроцессор C заголовок C Слепки C Обработка ошибок C Рекурсия C Переменный параметр C Управление памятью C Параметры командной строки C Классические 100 случаев

C Стандартная библиотека

C Стандартная библиотека - справочное руководство C Стандартная библиотека - <assert.h> C Стандартная библиотека - <ctype.h> C Стандартная библиотека - <errno.h> C Стандартная библиотека - <float.h> C Стандартная библиотека - <limits.h> C Стандартная библиотека - <locale.h> C Стандартная библиотека - <math.h> C Стандартная библиотека - <setjmp.h> C Стандартная библиотека - <signal.h> C Стандартная библиотека - <stdarg.h> C Стандартная библиотека - <stddef.h> C Стандартная библиотека - <stdio.h> C Стандартная библиотека - <stdlib.h> C Стандартная библиотека - <string.h> C Стандартная библиотека - <time.h>

C документ грамотности

Предыдущей главе мы объяснили стандартные устройства ввода и вывода обработки языка C. В этой главе мы введем C программиста, как создавать, открывать, закрывать текст или двоичные файлы.

Файл, будь то текст или двоичные данные, являются репрезентативными для серии байтов. Функция языка C не только обеспечивает доступ к верхнему уровню, но и обеспечивает базовую (ОС) вызывается для обработки файлов, хранящихся на устройстве. В этой главе будет объяснить важность вызова диспетчер файлов.

Открыть файл

Вы можете использовать функциюFOPEN () , чтобы создать новый документ или открыть существующий файл, то вызов будет инициализировать объект типа файла,типфайласодержит всю информацию , необходимую для управления потоком. Вот прототип этого вызова:

FILE *fopen( const char * filename, const char * mode );

Здесь, имя файла является строка используется для именования значение Режимдоступа файла может быть одним из следующих значений:

模式描述
r打开一个已有的文本文件,允许读取文件。
w打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。
a打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。
r+打开一个文本文件,允许读写文件。
w+打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。
a+打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。

Если процесс является двоичным файлом, вам необходимо использовать следующий режим доступа режим доступа для замены выше:

"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"

Закройте файл

;

Чтобы закрыть файл, используйте функцию fclose (). Прототип функции выглядит следующим образом:

 int fclose( FILE *fp );

В случае успеха, закройтефайл, функция fclose () возвращает ноль, ошибка возникает при закрытии файла, функция возвращает EOF.Эта функция на самом деле, будет очистить данные в буфере, закройте файл, и освобождает всю память для файла. EOF является константа , определенная в заголовочном файлеstdio.h в.

Стандартная библиотека C предоставляет множество функций нажать символ или в виде фиксированной длины строки для чтения и записи файлов.

Запись в файл

Вот символы записи в потоке самой простой функции:

int fputc( int c, FILE *fp );

Функцияfputc () записывает символ с к значению параметра Fp указывает на выходной поток.Если запись прошла успешно, она возвращает записанный символ, если происходит ошибка, то она возвращаетEOF.Вы можете использовать следующие функции в строку с завершающим нулем, чтобы записать в поток:

int fputs( const char *s, FILE *fp );

Функцияfputs () записывает строку сдо точки Fp в выходной поток. Если запись прошла успешно, она возвращает неотрицательное значение , если происходит ошибка, то она возвращаетEOF.Вы можете также использоватьINT fprintf (FILE * Ф.П., Const символ * формат, ...) функцию , чтобы написать строку записать в файл.Попробуйте следующие примеры:

Примечание: Убедитесь , что вы имеете в наличии каталог / TMP,если этот каталог не существует, вам необходимо создать каталог на вашем компьютере.

#include <stdio.h>

main()
{
   FILE *fp;

   fp = fopen("/tmp/test.txt", "w+");
   fprintf(fp, "This is testing for fprintf...\n");
   fputs("This is testing for fputs...\n", fp);
   fclose(fp);
}

Когда приведенный выше код компилируется и выполняется, то он будет создан в каталоге / TMP, новый файлtest.txt, и использовать две различные функции написаны две строки.Давайте читать файл.

Прочитайте файл

Вот самая простая функция для чтения одного символа из файла:

int fgetc( FILE * fp );

fgetc () функция читает символ из входного файла , на который указывает FP.Возвращаемое значение является символом для чтения, если произошла ошибка возвращаетсяEOF.Следующая функция позволяет считывать строку из потока:

char *fgets( char *buf, int n, FILE *fp );

Функцияfgets () считывает п из входного потока , на который указывает FP - один символ.Он будет читать строку скопированный в буферBUF, и , наконец , добавляет нулевойсимвол прекратить строку.

Если функция перед чтением последнего символа встречается символ новой строки '\ п' в конце файла или EOF, только чтобы вернуться, чтобы читать символы, в том числе новой строки. Вы можете также использоватьINT fscanf (FILE * Ф.П., Const символ * формат, ...) функции для чтения строки из файла, но в лице первого символа пробела, он перестанет читать.

#include <stdio.h>

main()
{
   FILE *fp;
   char buff[255];

   fp = fopen("/tmp/test.txt", "r");
   fscanf(fp, "%s", buff);
   printf("1 : %s\n", buff );

   fgets(buff, 255, (FILE*)fp);
   printf("2: %s\n", buff );
   
   fgets(buff, 255, (FILE*)fp);
   printf("3: %s\n", buff );
   fclose(fp);

}

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

1 : This
2: is testing for fprintf...

3: This is testing for fputs...

Во-первых, метод fscanf () только для чтения Это,потому что он встречает пространство в задней части . Далее, не называютfgets () , чтобы прочитать остальное, до конца строки.И, наконец, вызовfgets () читать в полном объеме во второй строке.

Бинарные функции ввода / вывода

Следующие две функции для дискретных входов и выходов:

size_t fread(void *ptr, size_t size_of_elements, 
             size_t number_of_elements, FILE *a_file);
              
size_t fwrite(const void *ptr, size_t size_of_elements, 
             size_t number_of_elements, FILE *a_file);

Эти две функции используются для чтения и записи блок памяти - как правило, массив или структуру.