unix style #2.1 (File and directory manipulation)

Ядро — главная часть Linux. Оно предоставляет такие сервисы, как управление памятью, диспетчеризация процессов, файловая система, сетевые стеки протоколов. Ядро управляет правами доступа по идентификаторам процессов и разрешениям на файлы, а так же предоставляет модули управления аппаратурой(иногда их называют драйверы устройств). Все эти программы выполняются в привилегированном режиме процессора и называются они «пространство ядра». Всё остальное — оболочка: утилиты командной строки, графические программы и все остальное запускается в непривилегированном режиме. Это называется «пространство пользователя». Ядро предоставляет свои сервисы программам пользователя через набор определённых точек входа, известных как системные вызовы. Их около 350.

Наши программы выполняют системные вызовы не напрямую, а посредством процедур-оболочек стандартной библиотеки glibc. Например в этой библиотеке есть функция write(). Другой пример функция printf(). Это не системный вызов, все форматирование она выполняет в пространстве пользователя и потом вызывает функцию write(), которая фактически выводит получившийся поток байтов. Бывают библиотечные процедуры, например sqrt(), которые работают в пространстве пользователя и не обращаются к пространству ядра. А например функция exit() в UNIX была системной, а в Linux стала библиотечной.

Системные вызовы описаны во втором разделе man страниц, а библиотечные в третьем.

Рассмотрим простое копирование

/*Simple copy file*/
/* gcc <filename>.c -o <filename> */
#include <fcntl.h>
#include <stdlib.h>

#define BSIZE 16384

void main() {
	int fin, fout; /*input, output descriptor*/
	char buf[BSIZE];
	int count;

	if ((fin = open("foo", O_RDONLY)) < 0) {
		perror("foo");
		exit(1);
	}

	if ((fout = open("bar", O_WRONLY|O_CREAT, 0644)) < 0) {
		perror("bar");
		exit(2);
	}

	while ((count = read(fin, buf, BSIZE)) > 0)
		write(fout, buf, count);

	close(fin);
	close(fout);
}
Simple copy file

Эта программа иллюстрирует пять системных вызовов: open(), read(), write(), close() и exit(), и одну библиотечную процедуру per­ror().

Вызов open() используется, чтобы преобразовать путь к файлу в дескриптор файла (небольшое неотрицательно целое число, которое используется с вызовами read, write и т.п. при последующем вводе-выводе). Если системный вызов завершается успешно, возвращается файловый дескриптор. В результате этого вызова появляется новый открытый файл, не разделяемый никакими процессами. Параметр O_RDONLY открывает файл «только для чтения». to be continued

Опубликовано 28.03.2016 в 14:49 · Автор garrydvaraza · Ссылка · Написать комментарий
Рубрики: linux system apps

unix style #1(IPC: Shared Memory)

Добрый день, мои дорогие друзья. Сегодня пойдет речь о…. барабанная дробь — разделяемой памяти. Это серия статей, в которой мы подробно разберем данных механизм. По большей части текст и примеры будут переводом из книги Дейва Маршала — профессора компьютерного зрения Университета Кардифа. В конце цикла, мы вместе напишем свою библиотечку. Да поможет нам Аллах, Будда и Святой Линус Торвальдс. Гоу!

IPC:Разделяемая память

Разделяемая память представляет собой эффективное средство для передачи данных между  программами. Одна программа создает кусок памяти, к которой (если разрешено) могут получить доступ другие процессы.

Процесс создает разделяемый сегмент памяти, используя функцию shmget(). Первоначальный владелец разделяемого сегмента памяти может назначать права владения другому пользователю с помощью функции shmctl(). Она также может отменить это назначение. Другие процессы с правильными правами могут управлять разделяемым сегментом памяти, используя semctl(). После создания, общий сегмент может быть присоединен к адресному пространству процесса с использованием shmat(). Он может быть откреплен функцией shmdt() (смотри shmop()).  Присоединенный процесс должен иметь соответствующие права для shmat (). После приcоединения, процесс может читать или писать в сегменте, как это предусмотрено правами, запрошенными в операции присоединения. Общий сегмент может быть подключен несколько раз одним и тем же процессом. Общий сегмент памяти описывается структурой управления с уникальным идентификатором, который указывает на область физической памяти. Идентификатор сегмента называется shmid. Определение  структур можно найти в <sys/shm.h>.

Читать полностью »

Опубликовано 15.03.2016 в 00:54 · Автор garrydvaraza · Ссылка · Написать комментарий
Рубрики: linux system apps · Теги: 

старт #0

.clapping

САП.   Это старт, это пост номер 1 !!! Я свяжу всю свою оставшуюся жизнь с геймдевом.

 

С любовью, ГарриДвараза.

Опубликовано 08.04.2015 в 16:23 · Автор garrydvaraza · Ссылка · Написать комментарий
Рубрики: Без рубрики