Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для Linux. ΠŸΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 72

Автор ΠœΠ°Ρ€ΠΊ ΠœΠΈΡ‚Ρ‡Π΅Π»Π»

Π’ Linux ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для чтСния содСрТимого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. И хотя ΠΎΠ½ΠΈ Π½Π΅ относятся ΠΊ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌ функциям, ΠΌΡ‹ всС ΠΆΠ΅ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΈΡ… ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ….

ΠŸΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ содСрТимого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ дСйствий.

1. Π’Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ opendir(), ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π΅ΠΉ ΠΏΡƒΡ‚Π΅Π²ΠΎΠ΅ имя Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Π­Ρ‚Π° функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ дСскриптор Ρ‚ΠΈΠΏΠ° DIR*, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для доступа ΠΊ содСрТимому ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Π’ случаС ошибки возвращаСтся NULL.

2. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ readdir(), пСрСдавая Π΅ΠΉ дСскриптор, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ opendir(). Всякий Ρ€Π°Π· функция readdir() Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° структуру Ρ‚ΠΈΠΏΠ° dirent, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ элСмСнтС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. По достиТСнии ΠΊΠΎΠ½Ρ†Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL. Π£ структуры dirent Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅ d_name, Π³Π΄Π΅ содСрТится имя элСмСнта ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.

3. Π’Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ closedir(), ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π΅ΠΉ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉΡΡ дСскриптор, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ сСанс Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ.

Для использования пСрСчислСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ„Π°ΠΉΠ»Ρ‹ <sys/types.h> ΠΈ <dirent.h>. ΠžΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° сортировку содСрТимого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° возлагаСтся Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

Π’ листингС Π‘.8 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰Π°Ρ список содСрТимого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Имя ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° задаСтся Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС. Если этого Π½Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° отобраТаСтся Π΅Π³ΠΎ Ρ‚ΠΈΠΏ ΠΈ ΠΏΡƒΡ‚Π΅Π²ΠΎΠ΅ имя. Ѐункция get_file_type() опрСдСляСт Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ lstat().

Листинг Π‘.8. (listdir.c) Π’Ρ‹Π²ΠΎΠ΄ содСрТимого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°

#include <assert.h>

#include <dirent.h>

#include <stdio.h>

#include <string.h>

#include <sys/stat.h>

#include <sys/types.h>

#include <unistd.h>


/* Π­Ρ‚Π° функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку с описаниСм Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

   Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ PATH. */

const char* get_file_type(const char* path) {

 struct stat st;

 lstat(path, &st);

 if (S_ISLNK(st.st_mode))

  return "symbolic link";

 else if (S_ISDIR(st.st_mode))

  return "directory";

 else if (S_ISCHR(st.st_mode))

  return "character device";

 else if (S_ISBLK(st.st_mode))

  return "block device";

 else if (S_ISFIFO(st.st_mode))

  return "fifo";

 else if (S_ISSOCK(st.st_mode))

  return "socket";

 else if (S_ISREG(st.st_mode))

  return "regular file";

 else

  /* НСраспознанный Ρ‚ΠΈΠΏ. */

  assert(0);

}


int main(int argc, char* argv[]) {

 char* dir_path;

 DIR* dir;

 struct dirent* entry;

 char entry_path[PATH_MAX + 1];

 size_t path_len;


 if (argc >= 2)

  /* Если ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΡƒΠΊΠ°Π·Π°Π½ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС, Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π³ΠΎ. */

  dir_path = argv[1];

 else

  /* Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³. */

  dir_path = ".";

 /* ΠšΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ имя ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ entry_path. */

 strncpy(entry_path, dir_path, sizeof(entry_path));

 path_len = strlen(dir_path);

 /* Если имя ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π½Π΅ заканчиваСтся косой Ρ‡Π΅Ρ€Ρ‚ΠΎΠΉ,

    добавляСм Π΅Π΅. */

 if (entry_path[path_len - 1] != '/') {

  entry_path[path_len] = '/';

  entry_path[path_len + 1] = '\0';

  ++path_len;

 }


 /* НачинаСм ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ список содСрТимого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. */

 dir = opendir(dir_path);

 /* просматриваСм всС элСмСнты ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. */

 while ((entry = readdir(dir)) != NULL) {

  const char* type;

  /* Π€ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΏΡƒΡ‚Π΅Π²ΠΎΠ΅ имя элСмСнта ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. */

  strncpy(entry_path + path_len, entry->d_name,

  sizeof(entry_path) β€” path_len);

  /* ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ Ρ‚ΠΈΠΏ элСмСнта. */

  type = get_file_type(entry_path);

  /* ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ ΡΠΎΠ±Ρ€Π°Π½Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. */

  printf("%-18s: %s\n", type, entry_path);

 }

 /* ΠšΠΎΠ½Π΅Ρ† Ρ€Π°Π±ΠΎΡ‚Ρ‹. */

 closedir(dir);

 return 0;

}

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ нСсколько строк листинга ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ /dev (Π² Ρ€Π°Π·Π½Ρ‹Ρ… систСмах ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π΄Π°Π½Ρ‹ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹)

% ./listdir /dev

directory        : /dev/.

directory        : /dev/..

socket           : /dev/log

character device : /dev/null

regular file     : /dev/MAKEDEV

fifo             : /dev/initctl

character device : /dev/agpgart

...

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ этих Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ls. Π€Π»Π°Π³ -U отмСняСт сортировку списка, Π° Ρ„Π»Π°Π³ -a заставляСт Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² список записи Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ (.) ΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ (..) ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ².

% ls -lua /dev total 124

drwxr-xr-x  7 root root   36864 Feb  1 15:14 .

drwxr-xr-x 22 root root    4096 Oct 11 16:39 ..

srw-rw-rw-  1 root root       0 Dec 18 01:31 log

crw-rw-rw-  1 root root  1,   3 May  5  1998 null

-rwxr-xr-x  1 root root   26689 Mar  2  2000 MAKEDEV

prw-------  1 root root       0 Dec 11 18:37 initctl

crw-rw-r--  1 root root 10, 175 Feb  3  2000 agpgart

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ символ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки опрСдСляСт Ρ‚ΠΈΠΏ элСмСнта ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π’

Π’Π°Π±Π»ΠΈΡ†Π° сигналов

Π’ Ρ‚Π°Π±Π». Π’.1 пСрСчислСны сигналы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‡Π°Ρ‰Π΅ всСго приходится ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π² Linux-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…. НСкоторыС сигналы ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π³Π΄Π΅ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹.

Π£ΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° сигналов ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² Π²ΠΈΠ΄Π΅ макроконстант прСпроцСссора. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΡΠ»Π°Ρ‚ΡŒΡΡ Π½Π° Π½ΠΈΡ… Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» <signal.h>. РСальноС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ сигналов Π΄Π°Π½ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ /usr/sys/signum.h, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ <signal.h>.

Для получСния ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ списка сигналов, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Π² Linux, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

% man 7 signal


Π’Π°Π±Π»ΠΈΡ†Π° Π’.1. Π‘ΠΈΠ³Π½Π°Π»Ρ‹ ОБ Linux

НазваниС ОписаниС SIGHUP Linux посылаСт этот сигнал, ΠΊΠΎΠ³Π΄Π° происходит ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°. МногиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ этот сигнал Π² ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΈΠ½Ρ‹Ρ… цСлях: ΠΎΠ½ слуТит ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ свой Ρ„Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ SIGINT Linux посылаСт процСссу этот сигнал, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ пытаСтся Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ процСсс Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ клавиш <Ctrl+C> SIGILL ΠŸΡ€ΠΎΡ†Π΅ΡΡ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ этот сигнал ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ стСка ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ SIGABRT Π­Ρ‚ΠΎΡ‚ сигнал посылаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ abort() SIGFPE По Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ этого сигнала ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ процСсс Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ» Π½Π΅Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой. Π’ зависимости ΠΎΡ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ процСссора Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ нСчисловоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ inf (Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ) ΠΈΠ»ΠΈ NaN (Π½Π΅ число), Π° Π½Π΅ сигнал SIGFPE SIGKILL Π­Ρ‚ΠΎΡ‚ сигнал ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΌΡƒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ процСсса ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‡Π΅Π½ SIGUSR1 Π­Ρ‚ΠΎΡ‚ сигнал Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ для ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ использования SIGUSR2 Π­Ρ‚ΠΎΡ‚ сигнал Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ для ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ использования SIGSEGV Π­Ρ‚ΠΎΡ‚ сигнал ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»Π° нСдопустимоС ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ памяти. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ адрСс находится Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ адрСсного пространства процСсса ΠΈΠ»ΠΈ процСссу Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ доступ ΠΊ этому участку памяти SIGPIPE Π­Ρ‚ΠΎΡ‚ сигнал ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ»Π°ΡΡŒ ΠΊ Ρ€Π°Π·Ρ€ΡƒΡˆΠ΅Π½Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊ сокСту, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Π·Π°ΠΊΡ€Ρ‹Ρ‚ Π½Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΉ сторонС SIGALRM Доставка этого сигнала планируСтся функциями alarm() ΠΈ setitimer() (см. Ρ€Π°Π·Π΄Π΅Π» 8.13 "Ѐункция setitimer(): Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ²") SIGTERM Π­Ρ‚ΠΎΡ‚ сигнал являСтся запросом Π½Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ процСсса ΠΈ посылаСтся ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ kill ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ SIGCHLD Linux посылаСт процСссу этот сигнал ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… процСссов (см. Ρ€Π°Π·Π΄Π΅Π» 3.4.4, "АсинхронноС ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… процСссов") SIGXCPU Linux посылаСт процСссу этот сигнал Π² случаС ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ доступа ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΌΡƒ процСссору (см. Ρ€Π°Π·Π΄Π΅Π» 8.5, "Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ getrlimit() ΠΈ setrlimit(): Π»ΠΈΠΌΠΈΡ‚Ρ‹ рСсурсов") SIGVTALRM Доставка этого сигнала планируСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ setitimer() (см. Ρ€Π°Π·Π΄Π΅Π» 8.13, "Ѐункция setitimer(): Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ²")

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π“