Теория вычислительных процессов и структур — страница 4

  • Просмотров 6043
  • Скачиваний 318
  • Размер файла 78
    Кб

(“/tmp/newfile”, O_WRONLY | O_CREAT, 0644); Здесь объединены флаги O_CREAT и O_WRONLY, задающие создание файла /tmp/newfile при помощи вызова open. Если /tmp/newfile не существует, то будет создан файл нулевой длины с таким именем и открыт только для записи. Параметр mode содержит число, определяющее права доступа к файлу, указывающие, кто из пользователей системы может осуществлять чтение, запись или выполнение файла. Пользователь, создавший файл, может выполнять

чтение из файла и запись в него. Остальные пользователи будут иметь доступ только для чтения файла. Следующая программа создаёт файл newfile в текущем каталоге: # include <stdlib.h> # include <fcnt1.h> #define PERMS 0644 /* Права доступа при открытии с O_CREAT */ char *filename=”newfile”; main() { int filedes; if ((filedes=open (filename, O_RDWR | O_CREAT, PERMS)) = = -1) { printf (“Невозможно открыть %sn”, filename); exit (1); /* Выход по ошибке */ } /* Остальная программа */ exit (0); } Другой способ создания файла заключается

в использовании системного вызова creat. Так же, как и вызов open, он возвращает либо ненулевой дескриптор файла, либо –1 в случае ошибки. Если файл успешно создан, то возвращаемое значение является дескриптором этого файла, открытого для записи. Вызов creat осуществляется так: # include <sys / types.h> # include <sys / stat.h> # include <fcnt1.h> int creat (const char *pathname, mode_t mode); Первый параметр pathname указывает на маршрутное имя файла UNIX, определяющее имя

создаваемого файла и путь к нему. Так же, как и в случае вызова open, параметр mode задаёт права доступа. При этом, если файл существует, то второй параметр также игнорируется. Тем не менее, в отличие от вызова open, в результате вызова creat файл всегда будет усечён до нулевой длины. Пример использования вызова creat: filedes = creat (“/tmp/newfile”, 0644); что эквивалентно вызову: filedes = open (“/tmp/newfile”, O_WRONLY | O_CREAT | O_TRUNC, 0644); Следует отметить, что вызов creat всегда

открывает файл только для записи. Например, программа не может создать файл при помощи creat, записать в него данные, затем вернуться назад и попытаться прочитать данные из файла, если предварительно не закроет его и не откроет снова при помощи вызова open. Библиотечная процедура fopen является эквивалентом вызова open: #include <stdio.h> FILE *fopen (const char *filename, const char *type); Процедура fopen открывает файл, заданный параметром filename, и связывает с ним

структуру FILE. В случае успешного завершения процедура fopen возвращает указатель на структуру FILE, идентифицирующую открытый файл; объект FILE * также часто называют открытым потоком ввода / вывода (эта структура FILE является элементом внутренней таблицы). В случае неудачи процедура fopen возвращает нулевой указатель NULL. При этом, так же, как и для open, переменная errno будет содержать код ошибки, указывающий на её причину. Второй параметр