Міністерство освіти і науки України
Національний університет
«ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Лабораторна робота №5
Загальне ознайомлення iз системними викликами операцiйної системи Linux
Мета роботи: познайомитися iз повним набором системних викликiв операцiйної системи Linux та призначенням i синопсисом найвживанiших системних викликiв.
Завдання:
Використовуючи програму Telnet i ввiвши login i password, пiд'єднатися до Linux-сервера.
Використовуючи команду man syscalls, познайомитися iз повним списком системних викликiв операцiйної системи Linux.
Використовуючи команду man, провести аналiз призначень системних викликiв, розбиваючи їх на наступнi групи:
ввiд-вивiд файлiв;
робота з каталогами;
керування пам'яттю;
робота з процесами (створення, завершення, тощо);
диспетчерування процесiв;
засоби мiжпроцесних комунiкацiй;
робота з мережею;
засоби роботи iз сигналами;
служба часу;
засоби видачi iнформацiї про операцiйну систему;
забезпечення роботи iз модулями.
Використовуючи команду man, познайомитися iз синопсисом, призначення, а також i вiповiдними структурами (struct) наступних системних викликiв:
open(2), create(2), read(2), write(2), close(2),
umask(2),
stat(2), fstat(2), lstat(2),
lseek(2),
readdir(2), getdents(2),
fork(2), execve(2), wait(2), exit(2), kill(2).
Використовуючи команду man, познайомитися iз призначення наступних системних викликiв:
access(2), chmod(2), fchmod(2), chown(2),
setuid(2), getuid(2),
link(2), unlink(2), symlink(2),
mknode(2), socket(2),
fcntl(2),
rename(2),
chdir(2), fchdir(2),
mkdir(2), rmdir(2),
ioctl(2),
pause(2),
nice(2),
uname(2),
getpid(2), setpid(2),
geteuid(2), setreuid(2),
alarm(2), time(2), stime(2),
gettimeofday(2), settimeofday(2),
times(2),
create_module(2), init_module(2),
delete_module(2), get_kernel_syms(2)
Результат виконання завдання:
Системні виклики операційної системи Linux
syscalls - перелік усіх системних викликів
Системний виклик - це основний інтерфейс між додатком і ядром Лінукса. Перелік системних викликів Linux складався з 1100 функцій, визначених в /usr/src/linux/include/asm-*/unistd.h.
_llseek(2), _newselect(2), _sysctl(2), accept(2), access(2), acct(2), adjtimex(2), afs_syscall, alarm(2),
bdflush(2), bind(2), break, brk(2), cacheflush(2), capget(2), capset(2), chdir(2), chmod(2), chown(2), chown32, chroot(2), clone(2), close(2), connect(2), creat(2), create_module(2), delete_module(2), dup(2),
dup2(2), execve(2), exit(2), fchdir(2), fchmod(2), fchown(2), fchown32, fcntl(2), fcntl64, fdatasync(2), flock(2), fork(2), fstat(2), fstat64, fstatfs(2),fsync(2), ftime, ftruncate(2), ftruncate64, get_ker-nel_syms(2), getcwd(2), getdents(2), getdents64, gete-gid(2), getegid32, geteuid(2), geteuid32, getgid(2), get-
gid32, getgroups(2), getgroups32, getitimer(2), getpage-size(2), getpeername(2), getpmsg, getpgid(2), getpgrp(2), getpid(2), getppid(2), getpriority(2), getresgid(2),getresgid32, getresuid(2), getresuid32, getrlimit(2), getrusage(2), getsid(2), getsockname(2), getsockopt(2), gettid, gettimeofday(2), getuid(2), getuid32, gtty, idle,init_module(2), ioctl(2), ioperm(2), iopl(2), ipc(2), kill(2), lchown(2), lchown32, link(2), listen(2), lock,lseek(2), lstat(2), lstat64, madvise(2), mincore(2), mkdir(2), mknod(2), mlock(2), mlockall(2), mmap(2), mod- ify_ldt(2), mount(2), mprotect(2), mpx, mremap(2), msync(2), munlock(2), munlockall(2), munmap(2), nanosleep(2), nfsservctl(2), nice(2), oldfstat, oldlstat,
oldolduname, oldstat, oldumount, olduname, open(2), pause(2), personality(2), phys, pipe(2), pivot_root(2), poll(2), prctl(2), pread(2), prof, profil, ptrace(2), putpmsg, pwrite(2), query_module(2), quotactl(2), read(2), readahead, readdir(2), readlink(2), readv(2), reboot(2), recv(2), recvfrom(2), recvmsg(2), rename(2), rmdir(2),rt_sigaction, rt_sigpending, rt_sigprocmask, rt_sigqueue- info, rt_sigreturn, rt_sigsuspend, rt_sigtimedwait, sched_get_priority_max(2), sched_get_priority_min(2),
sched_getparam(2), sched_getscheduler(2), sched_rr_get_interval(2), sched_setparam(2),
sched_setscheduler(2), sched_yield(2), security,select(2), sendfile(2), send(2), sendmsg(2), sendto(2),
setdomainname(2), setfsgid(2), setfsgid32, setfsuid(2), setfsuid32, setgid(2), setgid32, setgroups(2), set-
groups32, sethostname(2), setitimer(2), setpgid(2), set- priority(2), setregid(2), setregid32, setresgid(2), setresgid32, setresuid(2), setresuid32, setreuid(2),setreuid32, setrlimit(2), setsid(2), setsockopt(2), set-
timeofday(2), setuid(2), setuid32, setup(2), sgetmask(2), shutdown(2), sigaction(2), sigaltstack(2), signal(2), sig- pending(2), sigprocmask(2), sigreturn(2), sigsuspend(2) socket(2), socketcall(2), socketpair(2), ssetmask(2), stat(2), stat64, statfs(2), stime(2), stty, swapoff(2),swapon(2), symlink(2), sync(2), sysfs(2), sysinfo(2), sys- log(2), time(2), times(2), truncate(2), truncate64,ulimit, umask(2), umount(2), uname(2), unlink(2),uselib(2), ustat(2), utime(2), vfork(2), vhangup(2), vm86(2), vm86old, wait4(2), waitpid(2), write(2), writev(2).
З наведеного переліку, 9 є застарілими, а саме getrlimit,oldfstat, oldlstat, oldolduname, oldstat, olduname, read- dir, select та vm86old (дивіться сторінку obsolete(2)), і 15 ще не втілено в стандартному ядрі; ними являються afs_syscall, break, ftime, getpmsg, gtty, idle, lock, mpx, phys, prof, profil, putpmsg, security, stty та ulimit (дивіться unimplemented(2)). Однак, ftime(3), profil(3) та ulimit(3) існують як функції Стандартної бібліотеки. Місце phys зайнято, починаючи з 2.1.116, системним викликом umount, тож phys ніколи не буде реалізовано.Виклики getpmsg та putpmsg призначено для ядер з латкою
для підтримки потоків, і можуть ніколи не попасти до стандартного ядра. Виклик security зарезервовано на майбутнє.
Ввід-вивід файлів
_llseek(2), close(2), creat(2), dup(2), link(2), lseek(2)
Робота з каталогами
chdir(2), chroot(2), fchdir(2), mkdir(2)
Керування пам'яттю
brk(2), fdatasync(2), fsync(2), ftruncate(2), rename(2), sync(2)
Робота з процесами (створення, завершення, тощо)
execve(2), exit(2), flock(2), fork(2),
Диспетчерування процесiв
acct(2), getpid(2), getppid(2), nice(2), vfork(2)
Засоби мiжпроцесних комунiкацiй
mount(2), pipe(2), umount(2), uselib(2), vfork(2)
Робота з мережею
accept(2), bind(2), connect(2), getpeername(2), getsockname(2), getsockopt(2), send(2)
Засоби роботи iз сигналами
kill(2), pause(2), poll(2), signal(2) sig- pending(2)
Служба часу
acct(2), alarm(2), time(2), times(2), utime(2)
Засоби видачi iнформацiї про операцiйну систему
sysctl(2), fstat(2), fstatfs(2), gete-gid(2), geteuid(2), statfs(2)
Забезпечення роботи iз модулями
ioctl(2), ioperm(2), vhangup(2)
Призначення системних викликів, синопсис і структура деяких із них
_llseek(2) - змінює відносне положення читання/запису у файлі
close(2) -закриває дескриптор файла
creat(2)- відкриває і, по можливості, створює файл або пристрій
dup(2) - дублює дескриптор файла
link(2) - створює нову назву для файла
lseek(2) - переміщує позицію читання/запису файла
chdir(2) - змінює робочий каталог
chroot(2) - змінює кореневий каталог
fchdir(2) - змінює робочий каталог
mkdir(2) - створює каталог
brk(2) - змінює розмір сегменту даних
fdatasync(2) fsync(2)- синхронізують стан файла в пам'яті із тим, що на диску
ftruncate(2) - стинає файл до вказаної довжини
rename(2) - змінює назву і місцеположення файла
sync(2) - фіксує буферний кеш на диску
execve(2) - виконує програму
exit(2) - завершує роботу програми
flock(2) - застосовує дорадче замкнення відкритого файла
fork(2) - створює процес-нащадок.
acct(2) - вмикає та вимикає облік процесів
getpid(2) getppid(2) - добуття ідентифікаційного номера процесу
nice(2) - змінює пріоритет процесу
vfork(2) - створює дочірній процес і блокує батьківський
mount(2) umount(2)- монтаж та демонтаж файлових систем
pipe(2) - створює конвеєр
uselib(2) - призначає загальну бібліотеку
vfork(2) створює дочірній процес і блокує батьківський
accept(2) - приймає сполучення на сокеті
bind(2) - функція надання назви сокету
connect(2) - започатковує сполучення на сокеті
getpeername(2) - одержує ім'я сполученого сонета рівноправного вузла
getsockname(2) - добуває назву сокета
getsockopt(2) - добуває та задає опції сокета
send(2) - посилає повідомлення через сокет
kill(2) - надсилає сигнал процесу
pause(2) - очікування сигналу
poll(2) - очікує якоїсь події, що відбудеться на дескрипторі файла
signal(2) - обробка сигналів ANSI C
acct(2) - вмикає та вимикає облік процесів
alarm(2) - встановлює таймер для подачі сигналу тривоги
time(2) - повертає час у секундах
utime/s(2) - змінює час доступу і/або модифікаціїіндексного вузла
fstat(2) fstatfs(2)- добуття статусу файла
gete-gid(2) - добуває ідентифікатор групи
geteuid(2) добуває ідентичність користувача
statfs(2) - добуття статистики про файлову систему
ioctl(2) - керує пристроями
ioperm(2) - встановлює дозволи вводу-виводу портів
vhangup(2) - імітує завершення роботи на поточному терміна
NAME
link - call the link function to create a link to a file
SYNOPSIS
link FILE1 FILE2
link OPTION
DESCRIPTION
Call the link function to create a link named FILE2 to an existing
FILE1.
--help display this help and exit
--version
output version information and exit
NAME
write — send a message to another user
SYNOPSIS
write user [ttyname]
DESCRIPTION
The write utility allows you to communicate with other users, by copying
lines from your terminal to theirs.
When you run the write command, the user you are writing to gets a mes‐
sage of the form:
Message from yourname@yourhost on yourtty at hh:mm ...
Any further lines you enter will be copied to the specified user's termi‐
nal. If the other user wants to reply, they must run write as well.
When you are done, type an end-of-file or interrupt character. The other
user will see the message ‘EOF’ indicating that the conversation is over.
NAME
stat - display file or file system status
SYNOPSIS
stat [OPTION]... FILE...
DESCRIPTION
Display file or file system status.
-L, --dereference
follow links
-f, --file-system
display file system status instead of file status
-c --format=FORMAT
use the specified FORMAT instead of the default; output a new‐
line after each use of FORMAT
--printf=FORMAT
like --format, but interpret backslash escapes, and do not out‐ put a mandatory trailing newline. If you want a newline,
include \n in FORMAT.
-t, --terse
print the information in terse form
--help display this help and exit
--version
output version information and exit
NAME
kill - send a signal to a process
SYNOPSIS
kill [ -signal | -s signal ] pid ...
kill [ -L | -V, --version ]
kill -l [ signal ]
DESCRIPTION
The default signal for kill is TERM. Use -l or -L to list available
signals. Particularly useful signals include HUP, INT, KILL, STOP,
CONT, and 0. Alternate signals may be specified in three ways: -9
-SIGKILL -KILL. Negative PID values may be used to choose whole
process groups; see the PGID column in ps command output. A PID of -1
is special; it indicates all processes except the kill process itself
and init.
stat - добуття статусу файла
struct stat {
dev_t st_dev; /* прилад */
ino_t st_ino; /* індексний номер */
mode_t st_mode; /* захист */
nlink_t st_nlink; /* кількість твердих посилань */
uid_t st_uid; /* користувацький ID власника */
gid_t st_gid; /* ID групи власника */
dev_t st_rdev; /* тип приладу */
off_t st_size; /* загальний розмір, в байтах */
blksize_t st_blksize; /* розмір блоку для операцій вводу/виводу */
blkcnt_t st_blocks; /* кількість виділених блоків */
time_t st_atime; /* час останнього доступу */
time_t st_mtime; /* час останньої модифікації */
time_t st_ctime; /* час останньої зміни статусу */
};
readdir– зчитає дані каталога
#include <unistd.h>
#include <linux/dirent.h>
#include <linux/unistd.h>
_syscall3(int, readdir, uint, fd, struct dirent *, dirp, uint, count);
int readdir(unsigned int fd, struct dirent *dirp, unsigned int count);
Ця функція записує одну структуру dirent із каталогу,заданого fd, в область пам’яті, на яку вказує dirp. Параметр count майже завжди ігнорується і зчитується одна структура dirent.
Структура dirent визначена так:
struct dirent
{
long d_ino; /* номер inode */
off_t d_off; /* зміщення на dirent */
unsigned short d_reclen; /* довжина d_name */
char d_name [NAME_MAX+1]; /* і’мя файла */
}
d_ino - це номер inode. d_off - зміщення запису dirent від початку каталогу. d_reclen - довжина d_name (без кінцевого нуля). d_name – ім’я файла,яке закінчується нулем.
Призначення системних викликiв перелiчених в пунктi 4
open(2) - відкриває і, по можливості, створює файл або пристрій
create(2) - відкриває і, по можливості, створює файл або пристрій
read(2) - читає з дескриптора файла
write(2) - здійснює запис до дескриптора файла
close(2) - закриває дескриптор файла
umask(2) - встановлює маску створення файлів
stat(2) - добуття статусу файла
fstat(2) - добуття статусу файла
lstat(2) - добуття статусу файла
lseek(2) - переміщує позицію читання/запису файла
readdir(2) – отримати елемент каталогу по його дескриптору
getdents(2) – читання елементів із каталогу і перетворення в системно-незалежний формат.
fork(2) - створює процес-нащадок.
execve(2) - виконує програму
wait(2) –очікування завершення породженого процесу.
exit(2) - завершує роботу програми
kill(2) - надсилає сигнал процесу
Висновок: на даній лабораторній роботі я ознайомилася з системними викликами операційної системи Linux, а також призначенням і синопсисом найуживаніших із них.