Язык C позволяет осуществлять различные операции с файлами. В большинстве случаев эти операции не связаны с какими-либо сложностями.
FILE *fp;
fp = fopen(filename, mode);
Параметр filename позволяет передать имя файла (при отсутствии имени файла функция вернет NULL). Параметр mode позволяет указать режим открытия файла. Существуют следующие режимы открытия файлов:
Закрытие файла должно осуществляться сразу же после окончания работы с ним для предотвращения потери данных. Следует убедиться в том, что содержимое файла не модифицируется после его закрытия.
fclose(fp);
Для чтения данных из файла следует создать буфер (или буферы), в который будут помещаться прочитанные данные, целочисленную переменную, в которой будет сохраняться возвращаемое функцией количество прочитанных байтов и воспользоваться функцией fread().
size_t bytesread;
char buffer[100];
bytesread = fread(buffer, sizeof(buffer), 1, fp);
В качестве первого параметра используется указатель на буфер, в качестве второго — размер этого буфера, в качестве третьего — количество буферов для чтения, а в качестве четвертого — открытый файл. При достижении конца файла функция будет возвращать, как и в случае ошибки, нулевое значение, поэтому успешное достижение конца файла может быть установлено с помощью feof(), а возникновение ошибки — с помощью функции ferror().
feof(fp);
ferror(fp);
Для чтения строк из текстового файла может использоваться функция fgets(). При работе с ней также следует использовать буфер для сохранения прочитанной строки.
char buffer[100];
fgets(buffer, sizeof(buffer), fp);
В качестве первого параметра используется указатель на буфер, в качестве второго — размер этого буфера, в качестве третьего — открытый файл. Функция возвращает NULL в случае ошибки или достижения конца файла.
Для записи данных в файл следует подготовить буфер (или буферы) с данными для записи, целочисленную переменную, в которой будет сохраняться возвращаемое функцией количество записанных байтов и воспользоваться функцией fwrite().
size_t byteswritten;
char buffer[100];
byteswritten = fread(buffer, sizeof(buffer), 1, fp);
В качестве первого параметра используется указатель на буфер, в качестве второго — размер этого буфера, в качестве третьего — количество буферов для записи, а в качестве четвертого — открытый файл. При возникновении ошибки функция будет возвращать нулевое значение.
Для записи строк в текстовый файл может использоваться функция fputs(). При работе с ней также следует подготовить буфер со строкой для записи.
char buffer[100];
fputs(buffer, sizeof(buffer), fp);
Функция возвращает количество записанных байтов или символ EOF в случае возникновения ошибки.
Файлы могут свободно переименовываться. Для этого достаточно задать текущее и новое имена интересующего файла. Функция rename() возвращает нулевое значение при удачном переименовании файла.
res = rename(old, new);
С помощью первого параметра передается текущее имя файла, с помощью второго — его новое имя.
Файлы также могут удаляться. Для этого достаточно задать текущее имя интересующего файла. Функция remove() возвращает нулевое значение при удачном удалении файла.
res = remove(name);
С помощью единственного параметра передается имя существующего файла.
Каждый файл имеет права доступа, которые могут изменяться его владельцем при необходимости. В некоторых случаях файл может создаваться с правами только для чтения, что позволит предотвратить его изменение или с правами для исполнения, что позволит исполнять его как программу.
Функция chmod() позволяет устанавливать права доступа к файлу.
chmod(filename, mode);
Параметр filename позволяет передать имя файла, права доступа к которому необходимо изменить. Параметр mode позволяет указать права доступа к файлу в восьмеричном формате.
Данная простая программа построчно читает содержимое файла из виртуальной файловой файловой системы /proc и выводит информацию об установленном в компьютере центральном процессоре.