Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
□ 0 — стандартный ввод;
□ 1 — стандартный вывод;
□ 2 — стандартный поток ошибок.
Вы можете связать с файлами и устройствами другие дескрипторы файлов, используя системный вызов open, который уже обсуждался вкратце. Дескрипторы файлов, открытые автоматически, уже позволяют вам создавать простые программы с помощью вызова
write
write
Системный вызов
write
buf
nbytes
fildes
nbytes
write
errno
Далее приведена синтаксическая запись.
<b>#include <unistd.h></b>
<b>size_t write(int fildes, const void *buf, size_t nbytes);</b>
Благодаря полученным знаниям вы можете написать свою первую программу, simple_write.c:
#include <unistd.h>
#include <stdlib.h>
int main() {
if ((write(1, "Here is some datan", 18)) != 18)
write(2, "A write error has occurred on file descriptor 1n", 46);
exit(0);
}
Эта программа просто помещает сообщение в стандартный вывод. Когда она завершается, все открытые дескрипторы файлов автоматически закрываются, и вам не нужно закрывать их явно. Но в случае буферизованного вывода это не так.
$ <b>./simple_write</b>
Here is some data
$
И еще одно маленькое замечание: вызов
write
errno
write
read
Системный вызов
read
nbytes
fildes
buf
read
<b>#include <unistd.h></b>
<b>size_t read(int fildes, void *buf, size_t nbytes);</b>
Программа simple_read.c копирует первые 128 байтов стандартного ввода в стандартный вывод. Она копирует все вводимые данные, если их меньше 128 байтов.
#include <unistd.h>
#include <stdlib.h>
int main() {
char buffer[128];
int nread;
nread = read(0, buffer, 128);
if (nread == -1)
write(2, "A read error has occurredn", 26);
if ((write(1, buffer, nread)) != nread)
write(2, <i>"A</i> write error has occurredn", 27);
exit(0);
}
Если вы выполните программу, то получите следующий результат:
$ echo <b>hello there | ./simple_read</b>
hello there
$ <b>./simple_read < draft1.txt</b>
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
Для создания дескриптора нового файла вы должны применить системный вызов
open
<b>#include <fcntl.h></b>
<b>#include <sys/types.h></b>
<b>#include <sys/stat.h></b>
<b>int open(const char *path, int oflags);</b>
<b>int open(const char *path, int oflags, mode_t mode);</b>
Строго говоря, для использования вызова
open
Не вдаваясь в подробности, скажем, что вызов
open
read
write