Міністерство освіти і науки України
Національний університет Львівська політехніка
Звіт
до лабораторної роботи № 5
на тему: “ Загальне ознайомлення iз системними
викликами операцiйної системи Linux ”
Виконав
студент групи ІБ — 44
Перевірив
Львів — 2010
Мета роботи
Познайомитися iз повним набором системних викликiв операцiйної системи Linux та призначенням i синопсисом найвживанiших системних викликiв.
Повний список системних викликів
_exit - как exit, только с меньшими
возможностями (m+c)
accept - установка связи на сокете (m+c!)
access - проверка прав доступа пользователя к
файлу (m+c)
acct - пока не реализован (mc)
adjtimex - установка/получение переменных времени
ядра (-c)
afs_syscall - зарезервированный системный вызов
файловой системы andrew (-)
alarm - посылает SIGALARM в назначенное время
(m+c)
bdflush - сливает грязные буфера на диск (-c)
bind - назначает сокет для межпроцессовой
коммуникации (m!c)
break - пока не реализован (-)
brk - изменяет размеры сегмента данных (mc)
chdir - изменяет рабочую директорию (m+c)
chmod - изменяет атрибуты файла (m+c)
chown - изменяет владение файлом (m+c)
chroot - устанавливает новую корневую директорию
(mc)
clone - см. fork (m-)
close - закрывает файл по ссылке (m+c)
connect - связывает 2 сокета (m!c)
creat - создание файла (m+c)
creat_module - захватывает память для загружаемого модуля
ядра (-)
delete_module - выгружает модуль ядра (-)
dup - дублирует файловый дескриптор (m+c)
dup2 - дублирует файловый дескриптор (m+c)
execl, execlp, execle, ... - см. execve (m+!c)
execve - исполняет файл (m+c)
exit - завершает программу (m+c)
fchdir - изменяет рабочую директорию по ссылке ()
fchmod - см. chmode (mc)
fchown - изменяет владение файлом (mc)
fclose - закрывает файл по ссылке (m+!c)
fcntl - управление файлом/файловым дескриптором (m+c)
flock - изменение запирания файла (m!c)
fork - порождение потомка (m+c)
fpathconf - получение информации о файле по ссылке (m+!c)
fread - чтение массива двоичных данных из потока
(m+!c)
fstat - получение статуса файла (m+c)
fstatus - получение статуса файловой системы по ссылке
(mc)
fsync - запись кэша файла на диск (mc)
ftime - интервал времени + секунды с 1.1.1970
(m!c)
ftruncate - изменение размеров файла (mc)
fwrite - запись массива двоичных данных в поток
(m+!c)
get_kernel_syms - получение символьной таблицы ядра или ее
размеры (-)
getdomainname - получение имени системной области (m!c)
getdtablesize - получение размеров таблицы файлового
дескриптора (m!c)
getegid - получение эффективного id группы (m+c)
geteuid - получение эффективного id пользователя (m+c)
getgid - получение id группы (m+c)
getgroups - получение дополнительных групп (m+c)
gethostid - получение уникального идентификатора основной
системы (m!c)
gethostname - получение имени основной системы (m!c)
getitimer - получение значения интервального таймера (mc)
getpagesize - получение размеров страницы в системе (m-!c)
getpeername - получение имени присоединенного равного
сокета (m!c)
getpgid - получение id группы родительского процесса
(+c)
getpgrp - получение id группы родителя текущего
процесса (m+c)
getpid - получение id текущего процесса (m+c)
getppid - получение id родительского процесса (m+c)
getpriority - получение приоритета (процесса, группы,
пользователя) (mc)
getrlimit - получение лимита ресурсов (mc)
getrusage - сводка ресурсов (m)
getsockname - получение адреса сокета (m!c)
getsockopt - получение установок опций сокета (m!c)
gettimeofday - получение времени дня с 1.1.1970 (mc)
getuid - получение действительного id пользователя
(m+c)
gtty - пока не реализован ()
idle - делает процесс кандидатом на свопинг
(mc)
init_module - вставка загружаемого модуля ядра (-)
ioctl - работа с символьным устройством (mc)
ioperm - установка некоторых прав на ввод/вывод из
порта (m-c)
iopl - установка всех прав на ввод/вывод из порта
(m-c)
ipc - межпроцессовая коммуникация (-c)
kill - посылает сигнал процессу (m+c)
killpg - посылает сигнал группе процесса (mc!)
klog - см. syslog (-!)
link - создание жесткой ссылки на существующий файл
(m+c)
listen - прослушивание связей сокета (m!c)
llseek - lseek для больших файлов
lock - пока не реализован ()
lseek - изменение позиции ptr файлового дескриптора
(m+c)
lstat - получение статуса файла (mc)
mkdir - создание директории (m+c)
mknod - создание устройства (mc)
mmap - отображение файла в память (mc)
modify_ldt - чтение или запись локальной таблицы
дескриптора (-)
mount - монтирование файловой системы (mc)
mprotect - чтение, запись или исполнение для защищенной
памяти (-)
mpx - пока не реализован ()
msgctl - управление сообщением ipc (m!c)
msgget - получение id очереди сообщений ipc (m!c)
msgrcv - получение сообщения ipc (m!c)
msgsnd - посылка сообщение ipc (m!c)
munmap - удаление отображения файла из памяти (mc)
nice - изменение приоритета процесса (mc)
oldfstat - больше не существует
oldlstat - больше не существует
oldolduname - больше не существует
oldstat - больше не существует
olduname - больше не существует
open - открытие файла (m+c)
pathconf - получение информации о файле (m+!c)
pause - ждет до сигнала (m+c)
personality - получение текущей области исполнения для
ibcs (-)
phys - пока не реализован (m)
pipe - создание канал (m+c)
prof - пока не реализован ()
profil - исполнение временн'ого профиля (m!c)
ptrace - трассировка потомка (mc)
quotactl - пока не реализован ()
read - чтение данных из файла (m+c)
readv - чтение блоков данных с файла (m!c)
readdir - чтение директории (m+c)
readlink - получение содержимого символической связи (mc)
reboot - перезапуск (-mc)
recv - получение сообщения из присоединенного
сокета (m!c)
recvfrom - получение сообщения из сокета (m!c)
rename - перемещение/переименование файла (m+c)
rmdir - удаление пустой директории (m+c)
sbrk - см. brk (mc!)
select - усыпление до действия над файловым
дескриптором (mc)
semctl - управление семафором ipc (m!c)
semget - ipc выдает идентификатор множества
семафоров (m!c)
semop - операция ipc над членами множества
семафоров (m!c)
send - посылка сообщения в присоединенный сокет
(m!c)
sendto - посылка сообщения в сокет (m!c)
setdomainname - установка имени системной области (mc)
setfsgid - установка id группы файловой системы ()
setfsuid - установка id группы пользователя файловой
системы ()
setgid - установка действительного id группы (m+c)
setgroups - установка дополнительных групп (mc)
sethostid - установка уникального идентификатора
основной системы (mc)
sethostname - установка имени основной системы (mc)
setitimer - установка интервального таймера (mc)
setpgid - установка идентификатора группы процесса
(m+c)
setpgrp - не имеет никакого эффекта (mc!)
setpriority - установка приоритета (процесса, группы,
пользователя) (mc)
setregid - установка действительного и эффективного
идентификатора группы (mc)
setreuid - установка действительного и эффективного
идентификатора пользователя (mc)
setrlimit - установка лимита ресурса (mc)
setsid - создание сессии (+c)
setsockopt - изменение опций сокета (mc)
settimeofday - установка времени дня (с 1.1.1970) (mc)
setuid - установка действительного идентификатора
пользователя (m+c)
setup - инициализация устройств и монтирование
корня (-)
sgetmask - см. siggetmask (m)
shmat - привязка разделяемой памяти к сегменту
данных (m!c)
shmctl - манипуляции с разделяемой памятью (m!c)
shmdt - отвязка разделяемой памяти от сегмента
данных (m!c)
shmget - получение/создание разделяемого сегмента
памяти (m!c)
shutdown - закрытие сокета (m!c)
sigaction - установка/получение обработчика сигнала
(m+c)
sigblock - блокировка сигналов (m!c)
siggetmask - получение сигнала, блокирующего текущий
процесс (!c)
signal - установка обработчика сигнала (mc)
sigpause - использование новой маски сигнала, пока
не signal (mc)
sigpending - получение ожидающих, но заблокированных
сигналов (m+c)
sigprocmask - установка/получение сигнала, блокирующего
текущий процесс (+c)
sigreturn - пока не используется ()
sigsetmask - установка сигнала, блокирующего текущий
процесс (c!)
sigsuspend - переустановка для sigpause (m+c)
sigvec - см. sigaction (m!)
socket - создание точки коммуникации сокета (m!c)
socketcall - сокет вызывает мультиплексор (-)
socketpair - создание 2 связанных сокетов (m!c)
ssetmask - см. sigsetmask (m)
stat - получение статуса файла (m+c)
statfs - получение статуса файловой системы (mc)
stime - установка секунд с 1.1.1970 (mc)
stty - пока не реализован ()
swapoff - окончание свопинга в файл/устройство
(m-c)
swapon - начало свопинга в файл/устройство (m-c)
symlink - создание символической связи с файлом (m+c)
sync - синхронизация буферов памяти и диска (mc)
syscall - исполнение системного вызова по номеру (-!c)
sysconf - получение значения системной переменной
(m+!c)
sysfs - получение информации о конфигурированных
файловых системах ()
sysinfo - получение системной информации Linux-а (m-)
syslog - работа с системной регистрацией (m-c)
system - исполнение команды shell-а (m!c)
time - получение секунд с 1.1.1970 (m+c)
times - получение временн'ых характеристик процесса
(m+c)
truncate - изменение размера файла (mc)
ulimit - установка/получение границ файла (c!)
umask - установка маски создания файла (m+c)
umount - размонтирование файловых системы (mc)
uname - получение системной информации (m+c)
unlink - удаление незанятого файла (m+c)
uselib - использование разделяемой библиотеки (m-c)
ustat - пока не реализован (c)
utime - модификация временн'ых элементов inode (m+c)
utimes - см. utime (m!c)
vfork - см. fork (m!c)
vhangup - виртуально подвешивает текущий tty (m-c)
vm86 - войти в виртуальный режим 8086 (m-c)
wait - ожидание завершения процесса (m+!c)
wait3 - bsd ждет указанный процесс (m!c)
wait4 - bsd ждет указанный процесс (mc)
waitpid - ожидание указанного процесса (m+c)
write - запись данных в файл (m+c)
writev - запись блоков данных в файл (m!c)
(m) существует manual page.
(+) поддерживается POSIX-ом.
(-) специфично для Linux-а.
(c) в libc.
(!) не одиночный системный вызов, использует другой системный вызов.
Системні виклики можна умовно розділити на п'ять основних категорій:
Управління виробничим процесом.
Кінець, переривання
Навантаження, виконати
Створити процес, припинити процес
Отримати процесу атрибутів, набір атрибутів процесу
Чекати часу
Чекати події, знаковою подією
Виділення і звільнення пам'яті
Управління файлами.
Створити файл, видалити файл
Відкриття, закриття
Читати, писати, репозиція
Отримати атрибути файлів, набір атрибутів файлу
Device Management.
Запит пристрої, реліз пристрою
Читати, писати, репозиція
Отримати пристрій атрибути, набір атрибутів пристрої
Логічно підключення або від'єднання пристрою
Інформаційна підтримка.
Отримати час і дату, встановити час і дату
Отримати системи даних, встановлювати дані системи
Отримати процесу, файл або пристрій атрибути
Комплект процес, файл або пристрій атрибути
Зв'язок.
Створювати, видаляти зв'язку зв'язку
Відправляти, отримувати повідомлення
Передача інформації про стан
Підключення або від'єднання віддаленого пристрою
Системний виклик STAT
SYNOPSIS
#include <sys/types.h> #include <sys/stat.h> #include <unistd.h>
int stat(const char *file_name, struct stat *buf); int fstat(int filedes, struct stat *buf); int lstat(const char *file_name, struct stat *buf);
DESCRIPTION
Ці функції повертають інформацію про вказаний файлі. Вам не потрібні права доступу до файлу, отримати цю інформацію, але потрібно шукати права на всі каталоги, зазначені в шлях, що веде до файлу.STAT статистичний файл, на який вказує ім'я_файлу і заповнює BUF.LSTAT ідентичний стат, за винятком випадків, символічної посилання, де сама посилання стат-ред, а не файл, який вона посилається.FSTAT ідентичний статистики, лише відкрити файл, на який вказує filedes (який повертається з відкритих (2)) є стат-ред на місці ім'я_файлу.Вони всі повертаються стат структуру, яка містить такі поля:
struct stat {
dev_t st_dev; /* device */
ino_t st_ino; /* inode */
mode_t st_mode; /* protection */
nlink_t st_nlink; /* number of hard links */
uid_t st_uid; /* user ID of owner */
gid_t st_gid; /* group ID of owner */
dev_t st_rdev; /* device type (if inode device) */
off_t st_size; /* total size, in bytes */
blksize_t st_blksize; /* blocksize for filesystem I/O */
blkcnt_t st_blocks; /* number of blocks allocated */
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last change */
};
Значення st_size дає розмір файлу (якщо це звичайний файл або символічне посилання) в байтах. Розмір символічна посилання довжини шлях він містить, без задньої NUL.
Значення st_blocks видає розмір файлу в 512-байтних блоків. (Це може бути менше, ніж st_size/512 наприклад, якщо файл має отвори.) Вартість st_blksize дає "бажаний" розмір блоку для ефективного файлової системи вводу / виводу (Запис у файл у дрібні шматки може призвести до неефективного читати-зміна-перезапису.
Не всі файлові системи Linux виконувати всі поля часу. Деякі типи файлів системи дозволяють монтувати таким чином, щоб файл доступу не викликають оновлення st_atime області. (Див. `noatime в гори (8).
St_atime області змінюється файл доступ, наприклад, по execve (2), mknod (2), труби (2), utime (2) і читати (2) (більше нуля байт). Інші процедури, як відобразити в пам'яті (2), може чи не може оновлювати st_atime.
St_mtime області змінюється зміна файлів, наприклад, по mknod (2), усікання (2), utime (2) і писати (2) (більше нуля байт). Крім того, st_mtime довідника змінюється створення або видалення файлів у цьому каталозі. St_mtime області не буде змінено для зміни власника, групи жорстких оцінок посилання або режимі.
St_ctime області змінюється у письмовій формі або шляхом встановлення Інода інформацію (наприклад, власник, група, кількість посилань, спосіб і т.д.).
Системний виклик READDIR
SYNOPSIS
#include <sys/types.h>
#include <dirent.h>
struct dirent *readdir(DIR *dir);
DESCRIPTION
Readdir () повертає покажчик на несподіваний структуру як наступного запису каталозі в каталозі потік, на який вказує реж. Вона повертає NULL по досягненні кінця файлу або якщо сталася помилка.
Відповідно до POSIX, несподіваний структура містить поле символ d_name [] невизначеного розміру, з більш символів NAME_MAX попередньої нульовий символ. Використання інших полів зашкодить переносимість ваших програм. POSIX-2001 також документи d_ino області ino_t як розширення XSI.
Дані, що повертаються readdir () можуть бути замінені наступними викликами readdir () за той же потік каталогу.
RETURN VALUE
Readdir () повертає покажчик на несподіваний структури, або NULL, якщо відбувається помилка чи настає кінець файлу буде досягнутий.
Висновок: в даній лабораторній роботі я ознайомився з системними викликами ОС LINUX. Також я грунтовно ознайомився з декількома основними системними викликами. Як виявилось, в ОС LINUX є з десяток зарезервованим системних викликів, які поки що не реалізовані.