size_t read(int fildes, void *buf, size_t nbytes);
Программа simple_read.c копирует первые 128 байтов стандартного ввода в стандартный вывод. Она копирует все вводимые данные, если их меньше 128 байтов.
#include
#include
int main() {
char buffer[128];
int nread;
nread = read(0, buffer, 128);
if (nread == -1)
write(2, "A read error has occurred\n", 26);
if ((write(1, buffer, nread)) != nread)
write(2,
exit(0);
}
Если вы выполните программу, то получите следующий результат:
$ echo hello there | ./simple_read
hello there
$ ./simple_read < draft1.txt
Files
In this chapter we will be looking at files and directories and how to
manipulate them. We will learn how to create files, $
Первое выполнение программы с помощью команды echo
Обратите внимание на то, что знак подсказки или приглашения командной оболочки появляется в конце последней строки вывода, поскольку в этом примере 128 байтов не формируют целое число строк.
Для создания дескриптора нового файла вы должны применить системный вызов open
#include
#include
#include
int open(const char *path, int oflags);
int open(const char *path, int oflags, mode_t mode);
Строго говоря, для использования вызова open
Не вдаваясь в подробности, скажем, что вызов open
read, write и др. Дескриптор файла уникален и не используется совместно другими процессами, которые могут в данный момент выполняться. Если файл открыт одновременно в двух программах, они поддерживают отдельные дескрипторы файла. Если они обе пишут в файл, то продолжат запись с того места, где остановились. Их данные не чередуются, но данные одной программы могут быть записаны поверх данных другой. У каждой программы свое представление о том, какая порция файла (каково смещение текущей позиции в файле) прочитана или записана. Вы можете помешать нежелательным накладкам такого сорта с помощью блокировки файла, которая будет обсуждаться вИмя открываемого файла или устройства передается как параметр path
oflags применяется для указания действий, предпринимаемых при открытии файла.Параметр oflags
open должен задавать один из режимов доступа к файлу, указанных в табл. 3.1.| Режим | Описание |
|---|---|
О_RDONLY | Открытие только для чтения |
О_WRONLY | Открытие только для записи |
O_RDWR | Открытие для чтения и записи |
Вызов может также включать в параметр oflags
OR) следующих необязательных режимов:□ O_APPEND
□ O_TRUNC
□ O_CREAT
mode;□ O_EXCL
O_CREAT, который гарантирует, что вызывающая программа создаст файл. Вызов open атомарный, т.е. он выполняется только одним вызовом функции. Это предотвращает одновременное создание файла двумя программами. Если файл уже существует, open завершится неудачно.Другие возможные значения параметра oflags
man 2 open).