Хрестоматия по программированию на Си в Unix

Заказать замена электрики дома в Новосибирске и пригороде. Русский электрик.

Работа с файлами. Хрестоматия по программированию на Си в Unix - стр. 3


0 ## ------------ 1---##---------------->| f_flag | 2 ## | f_count=3 | 3---##---------------->| f_inode---------* ... ## *-------------->| f_offset | | процесс1 | ------!------ | | ! V 0 ## | struct file ! struct inode

1 ## | ------------- ! ------------- 2---##-* | f_flag | ! | i_count=2 | 3---##--->| f_count=1 | ! | i_addr[]----* ... ## | f_inode----------!-->| ... | | адреса процесс2 | f_offset | ! ------------- | блоков -------!----- *=========* | файла ! ! V 0 ! указатели R/W ! i_size-1 @@@@@@@@@@@!@@@@@@@@@@@@@@@@@@@@@!@@@@@@ файл на диске

/* открыть файл */ int fd = open(char имя_файла[], int как_открыть); ... /* какие-то операции с файлом */ close(fd); /* закрыть */

Параметр как_открыть:

#include <fcntl.h>

O_RDONLY - только для чтения. O_WRONLY - только для записи. O_RDWR - для чтения и записи. O_APPEND - иногда используется вместе с открытием для записи, "добавление" в файл: O_WRONLY|O_APPEND, O_RDWR|O_APPEND

Если файл еще не существовал, то его нельзя открыть: open вернет значение (-1),

struct file *u_ofile[NOFILE];

ссылка на I-узел текущего каталога

struct inode *u_cdir;

а также ссылка на часть паспорта в таблице процессов

struct proc *u_procp;

сигнализирующее об ошибке. В этом случае файл надо создать:

int fd = creat(char имя_файла[], int коды_доступа);

Дескриптор fd будет открыт для записи в этот новый пустой файл. Если же файл уже существовал, creat опустошает его, т.е. уничтожает его прежнее содержимое и делает его длину равной 0L байт. Коды_доступа задают права пользователей на доступ к файлу. Это число задает битовую шкалу из 9и бит, соответствующих строке

биты: 876 543 210 rwx rwx rwx

r - можно читать файл w - можно записывать в файл x - можно выполнять программу из этого файла

Первая группа - эта права владельца файла, вторая - членов его группы, третяя - всех прочих. Эти коды для владельца файла имеют еще и мнемонические имена (используемые в вызове stat):




- Начало -  - Назад -  - Вперед -