Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Таблица 3.2
Цифра | Значение | Смысл |
---|---|---|
1 | 0 | Никакие права пользователя не отвергнуты |
4 | Право пользователя на чтение отвергается | |
2 | Право пользователя на запись отвергается | |
1 | Право пользователя на выполнение отвергается | |
2 | 0 | Никакие права группы не отвергнуты |
4 | Право группы на чтение отвергается | |
2 | Право группы на запись отвергается | |
1 | Право группы на выполнение отвергается | |
3 | 0 | Никакие права остальных не отвергнуты |
4 | Право остальных на чтение отвергается | |
2 | Право остальных на запись отвергается | |
1 | Право остальных на выполнение отвергается |
Например, для блокирования права "группы" на запись и выполнение и права "остальных" на запись переменная umask должна была бы быть следующей (табл. 3.3).
Таблица 3.3
Цифра | Значение |
---|---|
1 | 0 |
2 | 2 |
1 | |
3 | 2 |
Значения каждой цифры объединяются операциями
OR
2 | 1
3
umask
Когда вы создаете файл с помощью системного вызова open или creat, параметр mode сравнивается с текущим значением переменной
umask
mode
umask
chmod
chmod
Системный вызов
close
fildes
<b>#include <unistd.h></b>
<b>int close (int fildes);</b>
В некоторых случаях проверка возвращаемого значения вызова
close
Системный вызов
ioctl
ioctl
ioctl
<b>#include <unistd.h></b>
<b>int ioctl(int fildes, int cmd, ...)</b>
Вызов
ioctl
cmd
fildes
Например, следующий вызов
ioctl
ioctl(tty_fd, KDSETLED, LED_NUM|LED_CAP|LED_SCR);
Выполните упражнения 3.1 и 3.2.
Теперь вы знаете достаточно о системных вызовах
open
read
write
В данной главе мы проделаем это несколькими способами для того, чтобы сравнить эффективность разных методов. Для краткости предположим, что входной файл существует, а выходной — нет, и что все операции чтения и записи завершаются успешно. Конечно, в реальных программах вам придется убедиться в том, что эти предположения верны!
1. Сначала вам нужно создать тестовый входной файл размером, скажем, 1 Мбайт и именем file.in.
2. Далее откомпилируйте программу copy_system.c.
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
int main() {
char c;
int in, out;
in = open("file.in", O_RDONLY);
put = open("file.out", O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR);
while(read(in, &c, 1) == 1) write(out, &c, 1);
exit(0);
}
Имейте в виду, что строка
#include <unistd.h>
#include