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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 77

Автор ΠœΡΡ‚ΡŒΡŽ НСйл

int main() {

Β int logmask;

Β openlog("logmask", LOG_PID|LOG_CONS, LOG_USER);

Β syslog(LOG_INFO, "informative message, pid = %d", getpid());

Β syslog(LOG_DEBUG, "debug message, should appear");

Β logmask = setlogmask(LOG_UPTO(LOG_NOTICE));

Β syslog(LOG_DEBUG, "debug message, should not appear");

exit(0);

}

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° logmask.c Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚, Π½ΠΎ Π² Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΉ систСмС Linux Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π² Ρ„Π°ΠΉΠ»Π΅ /var/log/messages, Π±Π»ΠΈΠΆΠ΅ ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строку:

Jun 9 09:28:52 suse103 logmask[19339] : informative message, pid = 19339

Π€Π°ΠΉΠ», настроСнный Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ рСгистрируСмых сообщСний ΠΎΠ± ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ (Π² зависимости ΠΎΡ‚ настройки рСгистрации, это Ρ‡Π°Ρ‰Π΅ всСго Ρ„Π°ΠΉΠ» /var/log/debug ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° Ρ„Π°ΠΉΠ» /var/log/messages), Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строку:

Jun 9 09:28:52 susel03 logmask[19339]: debug message, should appear

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ срСдство вСдСния систСмного ΠΆΡƒΡ€Π½Π°Π»Π°, Π½Π°Π·Π²Π°Π½Π½ΠΎΠ΅ logmask, ΠΈ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° процСсса Π² рСгистрируСмыС сообщСния. Π˜Π½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ сообщСниС записываСтся Π² Ρ„Π°ΠΉΠ» /var/log/messages, Π° ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠ΅ сообщСниС β€” Π² Ρ„Π°ΠΉΠ» /var/log/debug. Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠ΅ сообщСниС Π½Π΅ появляСтся, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π²Ρ‹Π·Π²Π°Π»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ

setlogmask
с ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ всСх сообщСний с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ Π½ΠΈΠΆΠ΅
LOG_NOTICE
. (Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ€Π°Π½Π½ΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… ядра Linux.)

Если Π² ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½Π½ΡƒΡŽ Ρƒ вас систСму Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° рСгистрация ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Ρ… сообщСний ΠΈΠ»ΠΈ ΠΎΠ½Π° настроСна ΠΈΠ½Π°Ρ‡Π΅, ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Π΅ сообщСния ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ. Для разблокирования всСх ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Ρ… сообщСний ΠΈ для получСния подробностСй настройки см. ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ, ΠΏΠΎΡΠ²ΡΡ‰Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

syslog
ΠΈΠ»ΠΈ
syslog-ng
.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° logmask.c Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ

getpid
, которая, наряду с тСсно связанной с Π½Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ
getppid
, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

<b>#include &lt;sys/types.h&gt;</b>

<b>#include &lt;unistd.h&gt;</b>

<b>pid_t getpid(void);pid_t getppid(void);</b>

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π²Ρ‹Π·Π²Π°Π²ΡˆΠ΅Π³ΠΎ ΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ процСссов. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°Ρ… процСссов (PID) см. Π² Π³Π»Π°Π²Π΅ 11.

РСсурсы ΠΈ ограничСния

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ΡΡ Π² систСмС Linux, зависят ΠΎΡ‚ ограничСнности рСсурсов. Π­Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ физичСскиС ограничСния, Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ), ограничСния, связанныС с систСмной ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΎΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½ΠΎΠ΅ врСмя процСссора) ΠΈΠ»ΠΈ ограничСния Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚ΠΈΠΏΠ°

integer
ΠΈΠ»ΠΈ максимально допустимоС количСство символов Π² ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°). Π’ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ UNIX Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· этих ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅Π΅ обсуТдСниС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΈ послСдствия ΠΈΡ… Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠΉ см. Π² Π³Π»Π°Π²Π΅ 7.

Π’ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ limits.h ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ константы, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ограничСния, Π½Π°Π»Π°Π³Π°Π΅ΠΌΡ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой (Ρ‚Π°Π±Π». 4.8).

Π’Π°Π±Π»ΠΈΡ†Π° 4.8

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ константа НазначСниС
NAME_MAX
МаксимальноС число символов Π² ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°
CHAR_BIT
ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ разрядов Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠ°
char
CHAR_MAX
МаксимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°
char
INT_MAX
МаксимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°
int

БущСствуСт мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ, поэтому слСдуСт ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ установлСнной Ρƒ вас вСрсии систСмы.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ константа

NAME_MAX
зависит ΠΎΡ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы. Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π»Π΅Π³ΠΊΠΎ пСрСносимого ΠΊΠΎΠ΄Π° слСдуСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ pathconf. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½Π΅ΠΉ см. Π½Π° страницах ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ справочного руководства.

Π’ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ sys/resource.h прСдставлСны опрСдСлСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ рСсурсами. К Π½ΠΈΠΌ относятся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для считывания ΠΈ установки ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° выполнСния ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… рСсурсов.

<b>#include &lt;sys/resource.h&gt;</b>

<b>int getpriority(int which, id_t who);</b>

<b>int setpriority(int which, id_t who, int priority);</b>

<b>int getrlimit(int resource, struct rlimit *r_limit);</b>

<b>int setrlimit(int resource, const struct rlimit *r_limit);</b>

<b>int getrusage(int who, struct rusage *r_usage);</b>

Π—Π΄Π΅ΡΡŒ

id_t
β€” это цСлочислСнный Ρ‚ΠΈΠΏ, примСняСмый для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°
rusage
, указанная Π² Ρ„Π°ΠΉΠ»Π΅ sys/resource.h, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для опрСдСлСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ процСссора (ЦП), Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ. Она Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, Π΄Π²Π° элСмСнта (Ρ‚Π°Π±Π». 4.9).

Π’Π°Π±Π»ΠΈΡ†Π° 4.9

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ структуры
rusage
ОписаниС
struct timeval ru_utime
ВрСмя, использованноС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ
struct timeval ru_stime
ВрСмя, использованноС систСмой

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°

timeval
ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² Ρ„Π°ΠΉΠ»Π΅ sys/time.h ΠΈ содСрТит поля
tv_sec
ΠΈ
tv_usec
, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ сСкунды ΠΈ микросСкунды соотвСтствСнно.

ВрСмя ЦП, потрСбляСмоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, дСлится Π½Π° врСмя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (врСмя, Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ самой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ собствСнных инструкций) ΠΈ систСмноС врСмя (врСмя ЦП, потрСбляСмоС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой Π² интСрСсах ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚.Π΅. врСмя, Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ Π½Π° систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ Π²Π²ΠΎΠ΄ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ систСмныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ).

Ѐункция

getrusage
записываСт Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ЦП Π² структуру
rusage
, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€
r_usage
. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€
who
ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· констант, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π». 4.10.