русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

OPEN, CREAT


Дата добавления: 2014-11-28; просмотров: 718; Нарушение авторских прав


open, creat - открывают и, по возможности, создают файл или устройство

 

СИНТАКСИС

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

int open(const char *pathname, int flags);

int open(const char *pathname, int flags, mode_t mode);

int creat(const char *pathname, mode_t mode);

 

ОПИСАНИЕ

Вызов open() используется, чтобы преобразовать путь к файлу в описатель файла (небольшое неотрицательно целое число, которое используется с вызовами read, write и т.п. при последующем вводе-выводе). Если системный вызов завершается успешно, возвращенный файловый описатель является наименьшим описателем, который еще не открыт процессом. В результате этого вызова появляется новый открытый файл, не разделяемый никакими процессами. Новый описатель файла будет оставаться открытым при выполнении функции exec(). Указатель устанавливается в начале файла. Параметр flags - это флаги O_RDONLY, O_WRONLY или O_RDWR, открывающие файлы "только для чтения", "только для записи" и для чтения и записи соответственно, которые собираются с помощью побитовой операции OR из таких значений, как:

  • O_CREAT - если файл не существует, то он будет создан. Владелец (идентификатор пользователя) файла устанавливается в значение эффективного идентификатора пользователя процесса.
  • O_TRUNC - если файл уже существует, он является обычным файлом и режим позволяет записывать в этот файл (т.е. установлено O_RDWR или O_WRONLY), то его длина будет урезана до нуля. Если файл является каналом FIFO или терминальным устройством, то этот флаг игнорируется. Иначе действие флага O_TRUNC не определено.
  • O_APPEND- Файл открывается в режиме добавления. Перед каждой операцией write файловый указатель будет устанавливаться в конце файла, как если бы использовался lseek.

Аргумент mode задает права доступа, которые используются в случае создания нового файла.



Следующие символьные константы можно использовать в mode:

  • S_IRWXU = 00700 пользователь (владелец файла) имеет права на чтение, запись и выполнение файла.
  • S_IRUSR (S_IREAD) = 00400 пользователь имеет права на чтение файла.
  • S_IWUSR (S_IWRITE) = 00200 пользователь имеет права на запись информации в файл.
  • S_IXUSR (S_IEXEC) = 00100 пользователь имеет права на выполнение файла.
  • S_IRWXG = 00070 группа имеет права на чтение, выполнение файла и запись в него информации.
  • S_IRGRP = 00040 группа имеет права на чтение файла.
  • S_IWGRP = 00020 группа имеет права на запись информации в файл.
  • S_IXGRP = 00010 группа имеет права на выполнение файла.
  • S_IRWXO = 00007 все остальные имеют права на чтение, выполнение файла и запись в него информации.
  • S_IROTH = 00004 все остальные имеют права на чтение файла.
  • S_IWOTH = 00002 все остальные имеют права на запись информации в файл.
  • S_IXOTH = 00001 все остальные имеют права на выполнение файла.

mode всегда должен быть указан при использовании O_CREAT; во всех остальных случаях этот параметр игнорируется. creat эквивалентен open с flags, которые равны O_CREAT | O_WRONLY | O_TRUNC.

 

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

open и creat возвращают новый описатель файла или -1 в случае ошибки (в этом случае значение переменной errno устанавливается должным образом). Заметьте, что open может открывать файлы устройств, но creat не может создавать их, поэтому используйте для создания функцию mknod().

5.2. CLOSE

close - функция, закрывающая описатель файла

 

СИНТАКСИС

#include <unistd.h>

int close(int fd);

 

ОПИСАНИЕ

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

Если fd является последней копией какого-либо файлового описателя, то ресурсы, связанные с ним, освобождаются; если описатель был последней ссылкой на файл, удаленный с помощью unlink(), то файл окончательно удаляется.

 

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

После успешного выполнения close возвращаемое значение становится равным нулю, а в случае ошибки оно равно -1.

5.3.READ

read - считывает данные файлового описателя

 

СИНТАКСИС

#include <unistd.h>

ssize_t read(int fd, void *buf, size_t count);

 

ОПИСАНИЕ

read() пытается записать count байтов файлового описателя fd в буфер, адрес которого начинается с buf.

Если количество count равно нулю, то read() возвращает это нулевое значение и завершает свою работу. Если count больше, чем SSIZE_MAX, то результат не может быть определен.

 

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном завершении вызова возвращается количество байтов, которые были считаны (нулевое значение означает конец файла), а позиция файла увеличивается на это значение. Если количество прочитанных байтов меньше, чем количество запрошенных, то это не считается ошибкой: например, данные могли быть почти в конце файла, в канале, на терминале, или read() был прерван сигналом. В случае ошибки возвращаемое значение равно -1, а переменной errno присваивается номер ошибки. В этом случае позиция файла не определена.

WRITE

write - производит запись в файловый описатель

 

СИНТАКСИС

#include <unistd.h>

ssize_t write(int fd, const void *buf, size_t count);

 

ОПИСАНИЕ

write записывает до count байтов из буфера buf в файл, на который ссылается файловый описатель fd.

 

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

В случае успешного завершения возвращается количество байтов, которые были записаны (ноль означает, что не было записано ни одного байта). В случае ошибки возвращается -1, а переменной errno присваивается соответствующее значение. Если count равен нулю, а файловый описатель ссылается на обычный файл, то будет возвращен ноль и больше не будет произведено никаких действий. Для специальных файлов результаты не могут быть перенесены на другую платформу.

EXIT

exit - обычное завершение работы программы

 

СИНТАКСИС

 

#include <stdlib.h>

void exit(int status);

 

ОПИСАНИЕ

Функция exit() приводит к обычному завершению программы. Все данные всех открытых потоков сохраняются и потоки закрываются. Файлы, созданные функцией tmpfile() удаляются.

Стандарт C описывает два определения EXIT_SUCCESS и EXIT_FAILURE, которые могут быть переданы exit() для обозначения соответственно успешного и неуспешного завершения.

 

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

Функция exit() не возвращает никаких значений.

Пример программы копирования файлов.

Программа копирует содержимое одного файла в другой, при этом она выводит копируемые строки на экран.

Для копирования введите в командной строке:

<имя программы> <файл источник> <файл приёмник>.

 

Текст программы:

 

#include <fcntl.h>

#define PERM 0666 /*Права доступа к создаваемому файлу*/

#define MAXLENGTH 2048 /*Длина буфера для копирования*/

 

void copy(int fold,int fnew); /*Объявление функции*/

int main(int argc,char *argv[])

{

int fdold,fdnew; /*Дескрипторы файлов*/

if(argc!=3) /*Неправильно указан источник*/

{ /*или приёмник*/

printf("\n\tNeed 2 arguments!\n");

exit(1);

}

if((fdold=open(argv[1],O_RDONLY))<0) /*Открываем файл*/

{ /*для чтения*/

printf("\n\tError open file %s\n",argv[1]);

exit(1);

}

if((fdnew=creat(argv[2],PERM))<0) /*Создаём новый файл*/

{ /*с правами PERM*/

printf("\n\tError creat file %s\n",argv[2]);

exit(1);

}

printf("\n\tFile %s content:\n",argv[1]);

copy(fdold,fdnew); /*Вызов функции копирования файлов*/

close(fdold); /*Закрываем дескрипторы файлов*/

close(fdnew);

return(0);

}

void copy(fold,fnew) /*Функция копирует содержимое первого*/

{ /*файла(fold) в созданный второй(fnew)*/

char buff[MAXLENGTH]; /*Буфер для копирования*/

ssize_t size; /*Количество прочитаных байт*/

while((size=read(fold,buff,sizeof(buff)))>0) /*Чтение*/

{ /*данных из источника*/

write(fnew,buff,size); /*Запись данных в приёмник*/

printf("%s",buff); /*Вывод данных на экран*/

}

}




<== предыдущая лекция | следующая лекция ==>
Права доступа к файлам. | Лабораторная работа №3


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.143 сек.