Статические и динамические библиотеки
8
ǹȓȑȘȜ ȕȎȚȓțȭȓȚȩȗ ȘȜȒ , .
ɫɨɛɫɬɜɟɧɧɨɦ
.
,
. .
, .
, ,
388 390 ?
391 392
.o
393 394 ar…
395
,
396 Head First
401 402
…
405 …
406 408 ?
409
-
411
410 423 ǬȋȢȐ, ȐȗȎȄ, ȐȄȕȏȒ, ȄȑțȒȗȕȟ…
ņśŗ Řśőşʼn? ņśŗ ŚʼnŕŗŔŎś? ĶŎś, Ŧśŗ ŘŎřŎŕŎŢʼnŎŕŤŒ ŗŊţŎœśŖŤŒ ŝʼnŒŔ Ś ŕŎśʼnōʼnŖŖŤŕő.
17
Лабораторная работа 2
OpenCV Представьте, что компьютер в ваше отсутствие может присматривать за домом и сообщать о подозрительных личностях, которые бродят вокруг. В лабораторной работе 2 вы создадите детектор для обнаружения незваных гостей, используя возможности возможн языка Си и мастерство OpenCV.
18
ɨɝɥɚɜɥɟɧɢɟ
Процессы и системные вызовы
9
ǾȎȕȞȡȦȎȭ ȑȞȎțȖȤȩ
. , ɜɵɡɵɜɚɬɶ ɞɪɭɝɢɟ
. ɩɪɨɝɪɚɦɦɵ
? ɩɪɨɰɟɫɫɨɜ
.
ɷɥɟɤɬɪɨɧɧɨɣ ɩɨɱɬɟ, ɛɪɚɭɡɟɪɭ
ɥɸɛɨɦɭ
ɭɫɬɚɧɨɜɥɟɧɧɨɦɭ ɜɧɟɲɧɟɦɭ ɩɪɢɥɨɠɟɧɢɸ. ɡɚ ɪɚɦɤɢ ɹɡɵɤɚ ɋɢ. — 434 -
438 439 exec()
440 exec()
441
— execv(), execvp(), execve()
442 443 444 RSS
452
exec() —
ņśŗ ŘřŗşŎŚŚ newshound.
456 fork() + exec()
457 463
ķŖ ŐʼnŘŜŚœʼnŎś Řŗ ŗśōŎŔťŖŗŕŜ ŘřŗşŎŚŚŜ ōŔŨ œʼnŏōŗŌŗ őŐ śřŎŞ ŖŗŋŗŚśŖŤŞ Řŗśŗœŗŋ.
newshound
īŚŎ ōŗŠŎřŖőŎ Ũ ŘřŗşŎŚŚŤ ŋŤŘŗŔŖŨŧśŚ ŗ. ŖŖ ŕŎ ŋřŎ ŗōŖŗ
19
Межпроцессорное взаимодействие
10
ǼȏȧȓțȖȓ — ȫȠȜ ȣȜȞȜȦȜ — Ч
. ?Ч
ɭɩɪɚɜɥɹɬɶ ɨɬɩɪɚɜɢɬɶ ɟɦɭ ɞɚɧɧɵɟ?
ɩɪɨɱɢɬɚɬɶ ɟɝɨ ɜɵɜɨɞ? ɜɵɩɨɥɧɹɬɶ ɪɚɛɨɬɭ
,
.
,
ɨɛɳɚɬɶɫɹ
. 466 467 468 fileno()
469 474 478 479 :
480 481 481
-
482 487 488
ssigaction
#include <stdio.h>
sigaction()
489 490
,
int main()
kill
493 502
{ char name[30]; printf("Введите свое имя: "); fgets(name, 30, stdin); printf("Привет, %s\n", name); return 0; File Edit Window Help
}
> ./greetings Введите свое имя: ^C > ĮŚŔő ŋŤ ŖʼnŏŕŎśŎ Ctrl + C, ŘřŗŌřʼnŕŕʼn ŘŎřŎŚśʼnŖŎś řʼnŊŗśʼnśť. Ķŗ ŘŗŠŎŕŜ?
20
ɨɝɥɚɜɥɟɧɢɟ
Сокеты и работа в Сети
11
ǻȓȠ ȚȓȟȠȎ șȡȥȦȓ, ȥȓȚ 127.0.0.1 . / , ɪɚɡɝɨɜɚɪɢɜɚɬɶ ɫɨ ɜɫɟɦ ɨɫɬɚɥɶɧɵɦ ɦɢɪɨɦ,
. , ɩɥɚɧɟɬɵ. ,
. -
« «
-
»
504
»
505 506
—
508 ,
512 513 514 521 522
-
526 527 IP-
528
getaddrinfo()
529 536
ijŔőŎŖś ő ŚŎřŋŎř ŋŎōŜś ŚśřŜœśŜřőřŗŋʼnŖŖŤŒ ōőʼnŔŗŌ, ŖʼnŐŤŋʼnŎŕŤŒ ŘřŗśŗœŗŔŗŕ.
telnet
ĺŎřŋŎř ŊŜōŎś ŗŊŢʼnśťŚŨ ŗōŖŗŋřŎŕŎŖŖŗ Ś ŖŎŚœŗŔťœőŕő œŔőŎŖśʼnŕő.
telnet telnet
21
Потоки
12
ȋȠȜ ȝȎȞȎșșȓșȪțȩȗ ȚȖȞ . POSIX-
, .
!
,
,
. , ɩɪɨɛɤɢ.
,
ɜ ɜɚɲɟɦ ɤɨɞɟ ɧɟ ɨɛɪɚɡɨɜɵɜɚɥɢɫɶ POSIX-
ɫɨɯɪɚɧɹɬɶ ɰɟɥɨɫɬɧɨɫɬɶ ɯɪɭɩɤɢɯ ɞɚɧɧɵɯ. …
…
…
538 539 540
— 541 542 pthread_create
543 548 549 550 557
A ĭŋʼn ʼnŋśŗŕŗŊőŔŨ ŚőŕŋŗŔőŐőřŜŧś ōŋʼn Řŗśŗœʼn. ķŖő ŞŗśŨś ŘŗŔŜŠő śť ōŗŚśŜŘ œ ŗōŖŗŒ ő śŗŒ ŏŎ ŗŊŢŎŒ ŘŎřŎŕŎŖŖŗŒ.
B 22
ɨɝɥɚɜɥɟɧɢɟ
ŐŋŗŔŨś ĺŋŎśŗŝŗřŤ ŖŎ Řŗ Šőśť ŔŜ ōŋŜŕ Řŗśŗœʼnŕ Řŗ ŜŘ œ ŗōŖŗŒ Śś ōŗ Ŗŗ ŗōŖŗŋřŎŕŎŖ ŘŎřŎŕŎŖŖŗŒ. ő śŗŒ ŏŎ ŗŊŢŎŒ
Лабораторная работа 3
Бластероиды В лабораторной работе 3 вы отдадите дань уважения одной из самых популярных и долговечных видеоигр. Пришло время написать «Бластероиды»!
23
Приложение I
На закуску
ȀȜȝ-10 ȢȎȘȠȜȐ (ȘȜȠȜȞȩȚ Țȩ țȓ ȡȒȓșȖșȖ ȐțȖȚȎțȖȓ) Д
,
,
.
,
.
,
, . ,
,
. ,
.
№ 1.
576
№ 2.
gcc
578
№ 3.
static
579
№ 4.
580
№ 5.
581
№ 6.
gcc
582
№ 7.
make
584
№ 8.
586
№ 9.
587
№ 10.
588
Приложение II Все темы
ǰȟȝȜȚțȖȠȪ Ȑȟȓ ? ,
. ,
, . .
24
ɨɝɥɚɜɥɟɧɢɟ
. ,
,
1 Начинаем работать с языком Си
ǽȜȑȞȡȔȎȓȚȟȭ ǴȄȋȆȉ Ȗȟ ȑȉ ȏȢȅȌȜȠ ȇȏȗȅȒȎȒȉ ȕȌȑȉȉ ȐȒȔȉ? dzȔȌȕȒȉȈȌȑȣȍȕȣ, ȆȒȈȌțȎȄ ȓȔȉȎȔȄȕȑȄȣ!
Х
,
?
ȼɚɦ ɧɭɠɧɨ ɧɚɩɢɫɚɬɶ ɞɥɹ ɧɨɜɨɣ ɢɝɪɵ? Ɂɚɩɪɨɝɪɚɦɦɢɪɨɜɚɬɶ ɤɨɧɬɪɨɥɥɟɪ Arduino? ɂɥɢ ɢɫɩɨɥɶɡɨɜɚɬɶ ɩɪɨɞɜɢɧɭɬɭɸ ɜ ɫɜɨɟɦ ɩɪɢɥɨɠɟɧɢɢ ɞɥɹ iPhone? Ɍɨɝɞɚ ɹɡɵɤ ɋɢ ɜɚɦ ɩɨɦɨɠɟɬ. Cɢ ɪɚɛɨɬɚɟɬ ɧɚ , ɱɟɦ ɛɨɥɶɲɢɧɫɬɜɨ ɞɪɭɝɢɯ ɹɡɵɤɨɜ ɩɪɨɝɪɚɦɦɢɪɨɜɚɧɢɹ, ɩɨɷɬɨɦɭ ɩɨɧɢɦɚɧɢɟ ɋɢ ɩɨɡɜɨɥɢɬ ɜɚɦ ɥɭɱɲɟ ɪɚɡɨɛɪɚɬɶɫɹ ɜ ɬɨɦ, . ɋɢ ɬɚɤɠɟ ɦɨɠɟɬ ɩɨɦɨɱɶ ɜ ɨɫɜɨɟɧɢɢ ɞɪɭɝɢɯ ɹɡɵɤɨɜ. ɉɨɷɬɨɦɭ ɯɜɚɬɚɣɬɟ ɫɜɨɣ ɤɨɦɩɢɥɹɬɨɪ ɢ ɧɟɦɟɞɥɟɧɧɨ ɩɪɢɫɬɭɩɚɣɬɟ ɤ ɞɟɥɭ.
37
К
Си – это язык для компактных быстрых программ .
.Э ȘȜȒ țȎȖȏȜșȓȓ ȝȜțȭȠȓț Ȓșȭ ȘȜȚȝȪȬȠȓȞȎ.
, ,
ȟȜȕȒȎțțȩȗ ȟ ȓȑȜ ȝȜȚȜȧȪȬ
Как работает Си — —
. ȘȜȚȝȖșȭȠȜȞȎ.
#include <stdio.h>
ŗś ī Windows Ŧś ś ōŎ ŊŜ ŝʼnŒŔ ŖŎ ŖʼnŐŤŋʼnśťŚŨ s.exe. ck ro rocks, ʼn
int main() File Edit Window Help Compile
{ puts("C Rocks!");
> gcc rocks.c -o rocks >
return 0; } rocks.c
rocks
1
3
2
Исходник
Компиляция
.
Вывод
.
, ȖȟȝȜșțȭȓȚȩȚ. Э —
,
, .
,
, .
.Э
, .
ǿȖ ȖȟȝȜșȪȕȡȓȠȟȭ ȠȎȚ, ȑȒȓ ȐȎȔțȩ ȟȘȜȞȜȟȠȪ Ȗ ȜȏȨȓȚ. ǯȜșȪȦȖțȟȠȐȜ ȜȝȓȞȎȤȖȜțțȩȣ ȟȖȟȠȓȚ țȎȝȖȟȎțȜ țȎ ǿȖ. ǺțȜȑȖȓ ȘȜȚȝȪȬȠȓȞțȩȓ ȭȕȩȘȖ ȠȎȘȔȓ țȎȝȖȟȎțȩ țȎ ǿȖ, ȞȎȐțȜ ȘȎȘ Ȗ ȏȜșȪȦȎȭ ȥȎȟȠȪ ȖȑȞȜȐȩȣ ȝȞȜȑȞȎȚȚ.
38
1
ȼɵ ɦɨɠɟɬɟ ɫɬɨɥɤɧɭɬɶɫɹ ɫ ɬɪɟɦɹ ɫɬɚɧɞɚɪɬɚɦɢ ɹɡɵɤɚ ɋɢ. ANSI C ɛɵɥ ɫɨɡɞɚɧ ɜ ɤɨɧɰɟ 1980-ɯ ɝɝ. ɢ ɢɫɩɨɥɶɡɭɟɬɫɹ ɞɥɹ ɧɚɢɛɨɥɟɟ ɫɬɚɪɨɝɨ ɤɨɞɚ. ȼ 1999 ɝ. ɦɧɨɝɢɟ ɚɫɩɟɤɬɵ ɹɡɵɤɚ ɛɵɥɢ ɢɫɩɪɚɜɥɟɧɵ ɜ ɫɬɚɧɞɚɪɬɟ C99. Ⱥ ɜ 2011 ɝ. ɩɨɹɜɢɥɫɹ ɫɨɜɪɟɦɟɧɧɵɣ ɫɬɚɧɞɚɪɬ C11 ɫ ɧɟɤɨɬɨɪɵɦɢ ɧɨɜɵɦɢ ɢɧɬɟɪɟɫɧɵɦɢ ɜɨɡɦɨɠɧɨɫɬɹɦɢ. Ɉɬɥɢɱɢɹ ɦɟɠɞɭ ɪɚɡɧɵɦɢ ɜɟɪɫɢɹɦɢ ɧɟ ɨɱɟɧɶ ɛɨɥɶɲɢɟ, ɢ ɦɵ ɛɭɞɟɦ ɭɤɚɡɵɜɚɬɶ ɧɚ ɧɢɯ ɜɪɟɦɹ ɨɬ ɜɪɟɦɟɧɢ.
Наточите свой карандаш int card_count = 11;
Попытайтесь угадать, что делает каждый из этих фрагментов. ķŘőšőśŎ ōŎŒŚśŋőŨ, œŗśŗřŤŎ, Ŧśŗś œŗō. Řŗ ŋʼnšŎŕŜ ŕŖŎŖőŧ, ŋŤŘŗŔŖŨŎś
if (card_count > 10) puts("Карты в колоде удачные. Повышаем ставку.");
int c = 10; while (c > 0) { puts("Я не должен писать код в виде классов"); c = c - 1; }
/* Подразумевается, что имя короче 20 латинских (и 10 кириллических) символов. */ char ex[20]; puts("Введите имя вашей девушки:"); scanf("%19s", ex); printf("Дорогая %s. \n\n\tС тобой покончено.\n”, ex);
char suit = 'H'; switch(suit) { case 'C': puts("Clubs(Трефы)"); break; case 'D': puts("Diamonds(Бубны)"); break; case 'H': puts("Hearts(Черви)"); break; default: puts("Spades(Пики)"); }
ɜɵ ɡɞɟɫɶ
39
Наточите свой карандаш Не волнуйтесь, если вам что-то непонятно. Далее в этой Решение книге будут даны более подробные пояснения. int card_count = 11;
int — şŎŔŗŎ ŠőŚŔŗ.
if (card_count > 10) puts("Карты в колоде удачные. Повышаем ставку.");
İōŎŚť śŎœŚś ŋŤŋŗōőśŚŨ ŋ œŗŕʼnŖōŖŗŒ ŚśřŗœŎ őŔő Ŗʼn śŎřŕőŖʼnŔ. ĽőŌŜřŖŤŎ ŚœŗŊœő ŗŘřŎōŎŔŨŧś ŊŔŗŠŖŜŧ int c = 10; őŖŚśřŜœşőŧ.
Создаем целочисленную переменную и устанавливаем для нее значение 11. Счетчик больше 10? Если да, то выводим сообщение в командной строке.
Создаем целочисленную переменную и устанавливаем для нее значение 10.
while (c > 0) {
До тех пор пока значение больше 0,...
puts("Я не должен писать код в виде классов");
...выводим сообщение...
c = c - 1;
...и уменьшаем счетчик. Конец кода, который должен повторяться.
}
/* Подразумевается, что имя короче 20 латинских (и 10 кириллических) символов. */ char ex[20];
Это комментарий. Создаем массив из 20 символов. Выводим сообщение на экран.
puts("Введите имя вашей девушки: ");
ņśŗ ŗŐŖʼnŠʼnŎś «ŘŗŕŎŚśőśť ŋŚŎ, Šśŗ
Сохраняем в массив то, что ввел пользователь.
scanf("%19s", ex); ŋŋŎŔ ŘŗŔťŐŗŋʼnśŎŔť, ŋŖŜśřť ŕʼnŚŚőŋʼn ex». Выводим сообщение, printf("Дорогая %s. \n\n\tС тобой покончено.\n”, включающее введенный текст. ex); İōŎŚť Śśřŗœʼn Śőŕ ŋŗŔŗŋ ŋŚśʼnŋŔŨŎśŚŨ Ŗʼn ŕŎŚ śŗ %s.
char suit = 'H'; switch(suit) { case 'C':
ıŖŚśřŜœşőŨ switch Řřŗ ŋŎřŨŎś ŗōŖŜ ő śŜ ŏŎ ŘŎřŎŕŎŖŖŜ ŧ Ŗʼn řʼnŐŖŤŎ ŐŖʼnŠŎŖőŨ.
Проверяем значение переменной. Оно равно «C»?
puts("Clubs(Трефы)");
Если да, то выводим «Clubs (Трефы)».
break;
Затем пропускаем остальные проверки.
case 'D': puts("Diamonds(Бубны)"); break; case 'H':
Оно равно «D»? Если да, то выводим «Diamonds (Бубны)». Затем пропускаем остальные проверки. Оно равно «H»?
puts("Hearts(Черви)");
Если да, то выводим «Hearts (Черви)».
break;
Затем пропускаем остальные проверки. В противном случае...
default: puts("Spades(Пики)");
...выводим «Spades (Пики)». На этом проверки заканчиваются.
}
40
Создаем символьную переменную, помещаем в нее букву «H».
1
Как выглядит программа на Си целиком , ȖȟȣȜȒțȩȗ ȢȎȗș.
ņśŗ ŋŚŎŌŗ Ŕőšť ŜŚŔŗŋŖŗŚśť, Ŗŗ ŋŤ ōŗŔŏŖŤ ŎŎ ŚŗŊŔŧōʼnśť.
, ,
,
.c. .
dzȔȒȇȔȄȐȐȟ ȑȄ ǵȌ ȒȅȟțȑȒ ȑȄțȌȑȄȢȖȕȣ ȕ ȎȒȐȐȉȑȖȄȔȌȣ.
1
, ,
,
,
. (
)
,
, .
ijŗŕŕŎŖśʼnřőŒ Ŗʼn ŠőŖʼnŎśŚŨ Ś ŚőŕŋŗŔŗŋ /*.
/* * Программа для подсчета количества карт в колоде.
ņśő ŐŋŎŐōŗŠœő ŖŎŗŊŨŐʼnśŎŔťŖŤ ő ŖŜŏŖŤ śŗŔťœŗ ōŔŨ œřʼnŚŗśŤ. ijŗŕŕŎŖśʼnřőŒ ŐʼnœʼnŖŠő ŋʼnŎśŚŨ ŚőŕŋŗŔʼnŕő */.
2
ǨȄȏȠȜȉ ȕȏȉȈȗȉȖ țȄȕȖȠ ȕ ȓȒȈȎȏȢțȉȑȌȉȐ ȆȑȉȜȑȌș ȘȄȍȏȒȆ.
* Этот код выпущен под публичной Лас-Вегасской лицензией. * (c)2014, Команда колледжа по блек-джеку. */ #include <stdio.h> int main()
—
{
,
int decks; ȐțȓȦțȖȣ ȏȖȏșȖȜȠȓȘ
puts("Введите количество колод."); scanf("%i", &decks);
.
if (decks < 1) {
,
puts("Вы ввели недопустимое количество колод."); ,
return 1; } printf("Всего карт %i\n”, (decks * 52));
. stdio.h. Э stdio,
return 0; } 3
dzȒȕȏȉȈȑȉȉ, țȖȒ Ȇȟ ȑȄȍȈȉȖȉ Ȇ ȌȕșȒȈȑȒȐ ȘȄȍȏȉ, — ȡȖȒ ȘȗȑȎȚȌȌ. .
.
ȑșȎȐțȜȗ — main(). .
,
,
DzȎȐȎȗȠȓ ȞȎȟȟȚȜȠȞȖȚ ȢȡțȘȤȖȬ main() ȏȜșȓȓ ȝȜȒȞȜȏțȜ. ɜɵ ɡɞɟɫɶ
41