Advertisement
Guest User

Untitled

a guest
May 28th, 2015
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.35 KB | None | 0 0
  1. 1.Komentowanie programów
  2.  
  3. P.1
  4.  
  5. #include <stdio.h>
  6. #include <unistd.h>
  7. int main()
  8. {
  9. //printf przeznaczony dla procesu macierzystego
  10. printf("Poczatek\n");
  11.  
  12. //tworzenie potomka który będzie od tego momentu kontynuował program
  13. fork();
  14.  
  15. //printf dla procesu macierzystego jak i potomnego dlatego "Koniec" jest wypisany 2 razy
  16. printf("Koniec\n");
  17. return 0;
  18. }
  19.  
  20. Wynik:
  21.  
  22. siara@siara-VirtualBox:~/Pulpit/termin 6$ gcc P1.c
  23. siara@siara-VirtualBox:~/Pulpit/termin 6$ ./a.out
  24. Poczatek
  25. Koniec
  26. Koniec
  27.  
  28. P.2
  29. #include <stdio.h>
  30. #include <unistd.h>
  31. int main()
  32. {
  33. //Wypisanie na ekran "Początek"
  34. printf("Poczatek\n");
  35.  
  36. //zastąpienie procesu innym, w tym przypadku procesem ls z parametrem -al
  37. execlp("ls", "ls", "-al", NULL);
  38.  
  39. //przez zastąpienie programu innym procesu ta komenda jest nie użyta
  40. printf("Koniec\n");
  41. return 0;
  42. }
  43.  
  44. Wyniki:
  45.  
  46. Poczatek
  47. razem 36
  48. drwxrwxr-x 2 siara siara 4096 maj 28 15:08 .
  49. drwxr-xr-x 3 siara siara 4096 maj 28 14:56 ..
  50. -rwxrwxr-x 1 siara siara 7194 maj 28 15:08 a.out
  51. -rwxrwxr-x 1 siara siara 7194 maj 28 15:06 P1
  52. -rw-rw-r-- 1 siara siara 139 maj 28 15:06 P1.c
  53. -rw-rw-r-- 1 siara siara 1156 maj 28 15:06 P1.o
  54. -rw-rw-r-- 1 siara siara 139 maj 28 15:06 P2.c
  55.  
  56. P.3
  57.  
  58. #include <stdio.h>
  59. #include <unistd.h>
  60. #include <stdlib.h>
  61. #include <sys/types.h>
  62. #include <sys/wait.h>
  63. int main()
  64. {
  65.  
  66. printf("Poczatek\n");
  67. //if który rozdziela instrukcje rodzica i potomka, fork() zwraca 0 dla potomka, sam fork //tworzy potomka
  68. if (fork() == 0)
  69. //child
  70. {
  71. //printf potomka
  72. printf("Child\n");
  73.  
  74. //zastąpienie procesu potomnego procesem ls -a
  75. execlp("ls", "ls", "-a", NULL);
  76.  
  77. //w przypadku błedu zostanie wysłany komunikat
  78. perror("Blad uruchmienia programu");
  79.  
  80. //zamknięcie programu z kodem wyjścia 1
  81. exit(1);
  82.  
  83. }
  84. else
  85. // parent
  86. {
  87. //printf rodzica
  88. printf("Parent\n");
  89.  
  90. // proces macierzysty czeka, aż proces potomny skończy prace
  91. wait(NULL);
  92.  
  93. //wypisaje na sam koniec wiadomość
  94. printf("Parent: koniec\n");
  95. return 0;
  96. }
  97. }
  98.  
  99. Wyniki:
  100. Poczatek
  101. Parent
  102. Child
  103. . .. a.out P1 P1.c P1.o P2 P2.c P2.o P3.c
  104. Parent: koniec
  105.  
  106. P.4
  107.  
  108. #include <stdio.h>
  109. #include <unistd.h>
  110. #include <stdlib.h>
  111. #include <sys/types.h>
  112. #include <sys/wait.h>
  113. int main()
  114. {
  115. // zadeklarowanie zmienny które będe przechowywać PID potomka
  116. pid_t pid1, pid2, status;
  117.  
  118. //porzypisanie do pid1 PID potomka i jego utworzenie
  119. pid1 = fork();
  120. if (pid1 == 0)
  121. {
  122. printf("Child\n");
  123. //zakończenie procesu z kodem wyjścia = 7, zostanie on póżniej wyświetlony
  124. exit(7);
  125.  
  126. }
  127. else
  128. {
  129. printf("Parent\n");
  130. //printf wypisujący PID potomka
  131. printf("Mam potomka o identyfikatorze %d", pid1);
  132.  
  133. //pjednoczesnie czeka na skonczenie pracy potomka i przypisuje jego PID do pid2
  134. pid2 = wait(&status);
  135.  
  136. //wypisauje PID zamkniętego procesu potomnego oraz status jego zamknięcia
  137. printf(" Wartość zmiennej status: %d: %x\n", pid2, status);
  138.  
  139. //wykona instrukcje jeżeli potomek zakończył proces przez wywołanie fukncji exit
  140. if(WIFEXITED(status))
  141.  
  142. //zwraca status zakończenia potomka, w tym przypadku jest to 7
  143. printf("Status zakonczenia procesu %d\n", WEXITSTATUS(status));
  144. return 0;
  145. }
  146. }
  147.  
  148. Wynik:
  149. Parent
  150. Child
  151. Mam potomka o identyfikatorze 3064 Wartość zmiennej status: 3064: 700
  152. Status zakonczenia procesu 7
  153.  
  154. P.5
  155.  
  156. #include <stdio.h>
  157. #include <unistd.h>
  158. #include <stdlib.h>
  159. #include <sys/types.h>
  160. #include <sys/wait.h>
  161. #include <stdio.h>
  162. int main()
  163. {
  164. pid_t pid1, pid2, status;
  165. //przypisanie do pid1 PID procesu potomnego i jego utworzenie
  166. pid1 = fork();
  167.  
  168. //instrukcje dla potomka
  169. if (pid1 == 0)
  170. {
  171. printf("Child\n");
  172. //działanie programu zostanie wstrzymane na 10s, w tym czasie proces zostanie //zakończony przez rodzinca komendą kill
  173. sleep(10);
  174.  
  175. //nie zostanie użyte gdyż prędzej zostanie zakonczony proces
  176. exit(7);
  177. }
  178. //intrukcje dla rodzica
  179. else
  180.  
  181. {
  182. printf("Parent\n");
  183. //wypisanie PID potomka
  184. printf("Mam potomka o identyfikatorze %d\n", pid1);
  185.  
  186. //wysłanie komedy kill do zakmnięcia procesu potomnego o sygnale = 9
  187. kill(pid1, 9);
  188.  
  189. //czeka na zakmnięcie procesu potomneog oraz przypisuje PID zamkniętego //procesu potomnego
  190. pid2 = wait(&status);
  191.  
  192.  
  193.  
  194. //wyświetla PID zamkniętego procesu oraz status zamknięcia wysłąny z komedy kill
  195. printf("Wartość zmiennej status: %d: %x\n", pid2, status);
  196.  
  197.  
  198. //Jęzeli proces został zakmnięty w wyniku otrzymania synału (przez kill) wywoła isntrukcje
  199. if(WIFSIGNALED(status))
  200.  
  201. //wypisze wartość sygnału który spowodował zamknięcie potomka
  202. printf("Status zakonczenia procesu w wyniku otrzymania sygnału o numerze: %d\n", WTERMSIG(status));
  203. return 0;
  204. }
  205. }
  206.  
  207. Wynik:
  208. Parent
  209. Mam potomka o identyfikatorze 3302
  210. Wartość zmiennej status: 3302: 9
  211. Status zakonczenia procesu w wyniku otrzymania sygnału o numerze: 9
  212.  
  213. P.6
  214.  
  215. #include <unistd.h>
  216. #include <stdlib.h>
  217. #include <sys/types.h>
  218. #include <sys/wait.h>
  219. #include <stdio.h>
  220. int main()
  221. {
  222. //rodzice pisze "start" pierwszy
  223. printf("Parent: start\n");
  224.  
  225. //instrukcje dla potomka i jego utworzenie
  226. if (fork() ==0)
  227. {
  228. //potomek wypisuje start odrazu po utworzeniu
  229. printf("Child: start\n");
  230.  
  231. //czeka 30s, az rodzic skończy prace i zostaje procesem sierotą
  232. sleep(30);
  233.  
  234. //po 30s wypisuje na zakończenie jako ostatni "end"
  235. printf("Child: end\n");
  236. exit(0);
  237. }
  238. //rodzic odrazu po utworzeniu potomka wypisuje "end"
  239. printf("Parent: end\n");
  240.  
  241. //rodzic kończy prace i osieraca potomka
  242. exit(0);
  243. }
  244.  
  245. Wynik:
  246. Parent: start
  247. Parent: end
  248. Child: start
  249. Child: end
  250.  
  251. P.7
  252.  
  253. #include <unistd.h>
  254. #include <stdlib.h>
  255. #include <sys/types.h>
  256. #include <sys/wait.h>
  257. #include <stdio.h>
  258. int main()
  259. {
  260. // jako pierwszy rodzic wypisuje "start"
  261. printf("Parent: start\n");
  262. if (fork() ==0)
  263. {
  264.  
  265. //printf "Child: start" i "Child: end" potomka wypisane jedno pod drugim
  266. printf("Child: start\n");
  267. printf("Child: end\n");
  268.  
  269. //zamknięcie procesu i wysłanie statusu zakończenia do rodzica
  270. exit(0);
  271. }
  272. else
  273. {
  274.  
  275. //rodzic zwleka 30s z odebraniem statusu zakończenia od potomka, tworząc proces-zombie
  276. sleep(30);
  277. printf("Parent: before wait()\n");
  278.  
  279. //rodzic wreście odbiera status od potomka co usuwa proces-zombie
  280. wait(NULL);
  281.  
  282. //wypisuje jako ostani "Parent: end"
  283. printf("Parent: end\n");
  284. exit(0);
  285. }
  286. }
  287.  
  288. Wynik:
  289. Parent: start
  290. Child: start
  291. Child: end
  292. Parent: before wait()
  293. Parent: end
  294. 2.Modyfikowanie programów
  295.  
  296. P.1
  297.  
  298. #include <stdio.h>
  299. #include <unistd.h>
  300. int main()
  301. {
  302. //printf przeznaczony dla procesu macierzystego
  303. printf("Poczatek\n");
  304.  
  305. //tworzenie potomka który nie zrobi nic i zakończy prace
  306. if(fork()==0)
  307. {
  308. exit(0);
  309. }
  310. else
  311. //instrukcje dla rodzica
  312. {
  313. printf("Koniec\n");
  314. }
  315. //printf dla procesu macierzystego jak i potomnego dlatego "Koniec" jest wypisany 2 razy
  316.  
  317. return 0;
  318. }
  319.  
  320. Wynik:
  321. Poczatek
  322. Koniec
  323.  
  324. P.2
  325. A
  326. #include <stdio.h>
  327. #include <unistd.h>
  328. int main()
  329. {
  330. //Wypisanie na ekran "Początek"
  331. printf("Poczatek\n");
  332.  
  333. //zastąpienie procesu innym, w tym przypadku procesem ls z parametrem -al, przy //execl trzeba podać ścieżke do programu
  334. execl("/bin/ls", "ls", "-al", NULL);
  335.  
  336. //przez zastąpienie programu innym procesu ta komenda jest nie użyta
  337. printf("Koniec\n");
  338. return 0;
  339. }
  340.  
  341.  
  342. Wynik:
  343. Poczatek
  344. razem 116
  345. drwxrwxr-x 2 siara siara 4096 maj 28 17:54 .
  346. drwxr-xr-x 3 siara siara 4096 maj 28 14:56 ..
  347. -rwxrwxr-x 1 siara siara 7193 maj 28 17:54 a.out
  348. -rwxrwxr-x 1 siara siara 7192 maj 28 17:48 P1
  349. -rw-rw-r-- 1 siara siara 361 maj 28 17:48 P1.c
  350. -rw-rw-r-- 1 siara siara 1100 maj 28 17:48 P1.o
  351. -rwxrwxr-x 1 siara siara 7193 maj 28 17:54 P2
  352. -rw-rw-r-- 1 siara siara 373 maj 28 17:54 P2.c
  353. -rw-rw-r-- 1 siara siara 1164 maj 28 17:54 P2.o
  354. -rwxrwxr-x 1 siara siara 7340 maj 28 15:57 P3
  355. -rw-rw-r-- 1 siara siara 357 maj 28 15:57 P3.c
  356. -rw-rw-r-- 1 siara siara 1432 maj 28 15:57 P3.o
  357. -rwxrwxr-x 1 siara siara 7302 maj 28 15:58 P4
  358. -rw-rw-r-- 1 siara siara 986 maj 28 15:57 P4.c
  359. -rw-rw-r-- 1 siara siara 1472 maj 28 15:58 P4.o
  360. -rwxrwxr-x 1 siara siara 7375 maj 28 16:39 P5
  361. -rw-rw-r-- 1 siara siara 1273 maj 28 16:39 P5.c
  362. -rw-rw-r-- 1 siara siara 1604 maj 28 16:39 P5.o
  363. -rw-rw-r-- 1 siara siara 606 maj 28 16:39 P6.c
  364. -rwxrwxr-x 1 siara siara 7301 maj 28 17:01 P7
  365. -rw-rw-r-- 1 siara siara 699 maj 28 17:37 P7.c
  366. -rw-rw-r-- 1 siara siara 1372 maj 28 17:01 P7.o
  367.  
  368. B
  369.  
  370. P2.c
  371. #include <stdio.h>
  372. #include <unistd.h>
  373. int main()
  374. {
  375. //Wypisanie na ekran "Początek"
  376. printf("Poczatek\n");
  377.  
  378. //zastąpienie naszym własynm programem
  379. execl("/home/siara/Pulpit/termin 6/P2b",NULL, NULL);
  380.  
  381. //przez zastąpienie programu innym procesu ta komenda jest nie użyta
  382. printf("Koniec\n");
  383. return 0;
  384. }
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392. P2b.c
  393. #include <stdio.h>
  394. #include <unistd.h>
  395.  
  396. int main()
  397. {
  398. int i;
  399. //pętla wypisująca kolejne liczby
  400. for( i=1;i<11;i++)
  401. {
  402. printf("%d \n",i);
  403. }
  404.  
  405. }
  406. Wynik:
  407. Poczatek
  408. 1
  409. 2
  410. 3
  411. 4
  412. 5
  413. 6
  414. 7
  415. 8
  416. 9
  417. 10
  418.  
  419. P.3
  420.  
  421. #include <stdio.h>
  422. #include <unistd.h>
  423. #include <stdlib.h>
  424. #include <sys/types.h>
  425. #include <sys/wait.h>
  426. int main()
  427. {
  428. pid_t pid1, pid2, pid3;
  429.  
  430. pid1 = fork();
  431. if (pid1 == 0)
  432. {
  433. //pobranie pid potomka i pid rodzica za pomocą geterów
  434. pid2 = getpid();
  435. pid3 = getppid();
  436.  
  437. //wypisanie PID i PPID
  438. printf("Child: PID potomka %d\n",pid2);
  439. printf("Child: PPID potomka %d\n",pid3);
  440. //child
  441. int i;
  442.  
  443. //wypisanie w odstępak 1s printf
  444. for(i=1;i<11;i++)
  445. {
  446. printf("Child: %d\n",i);
  447. sleep(1);
  448. }
  449.  
  450.  
  451.  
  452. exit(1);
  453. }
  454. else
  455. // parent
  456. {
  457. //wypisanie PID potomka
  458. printf("Parent: PID potomka %d\n",pid1);
  459. int j;
  460. //pętla rodzica wypisująca w odstępach 1s wiadomości
  461. for(j=1;j<11;j++)
  462. {
  463. sleep(1);
  464. printf("Parent: %d\n",j);
  465.  
  466. }
  467. //czekanie aż potomek skończy prace, chociaż kończy ją wcześniej niż rodzic
  468. //uważam że nie ma to chyba znaczenia który program skończy prace wcześniej
  469. wait(NULL);
  470. printf("Parent: koniec\n");
  471. return 0;
  472. }
  473. }
  474. Wynik:
  475. Parent: PID potomka 5686
  476. Child: PID potomka 5686
  477. Child: PPID potomka 5685
  478. Child: 1
  479. Parent: 1
  480. Child: 2
  481. Parent: 2
  482. Child: 3
  483. Parent: 3
  484. Child: 4
  485. Parent: 4
  486. Child: 5
  487. Parent: 5
  488. Child: 6
  489. Parent: 6
  490. Child: 7
  491. Parent: 7
  492. Child: 8
  493. Parent: 8
  494. Child: 9
  495. Parent: 9
  496. Child: 10
  497. Parent: 10
  498. Parent: koniec
  499.  
  500. P.4
  501.  
  502. #include <unistd.h>
  503. #include <stdlib.h>
  504. #include <sys/types.h>
  505. #include <sys/wait.h>
  506. #include <stdio.h>
  507. int main()
  508. {
  509. //rodzic pisze "start" pierwszy
  510. printf("Parent: start\n");
  511. pid_t ppid;
  512. //instrukcje dla potomka i jego utworzenie
  513. if (fork() ==0)
  514. {
  515. //potomek wypisuje start odrazu po utworzeniu
  516. printf("Child: start\n");
  517. ppid = getppid();
  518. //czeka 10s, az rodzic skończy prace i zostaje procesem sierotą
  519. sleep(10);
  520. printf("Child: PPID %d\n",ppid);
  521. sleep(30);
  522. ppid = getppid();
  523. printf("Child: nowe PPID %d\n",ppid);
  524. //po 30s wypisuje na zakończenie jako ostatni "end"
  525. printf("Child: end\n");
  526. exit(0);
  527. }
  528. //rodzic odrazu po utworzeniu potomka wypisuje "end"
  529. sleep(30);
  530. printf("Parent: end\n");
  531.  
  532. //rodzic kończy prace i osieraca potomka
  533. exit(0);
  534. }
  535.  
  536. Wynik:
  537. Parent: start
  538. Child: start
  539. Child: PPID 5882
  540. Parent: end
  541. nowe PPID 1
  542. Chil: end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement