Paszta

Zadanka od Podróżnika

Jun 10th, 2019
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 14.00 KB | None | 0 0
  1. FORK
  2. -------------------------------------------------
  3. #include <sys/types.h>
  4. #include <unistd.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7.  
  8. int main(int argc, char** argv)
  9. {
  10.     pid_t pid_potomka;
  11.     char *komunikat;
  12.     int powtorzen;
  13.     printf("Na razie dziaĹ‚a jeden proces\n");
  14.     pid_potomka = fork();
  15.     switch (pid_potomka)
  16.     {
  17.         case -1:
  18.             printf("rozwidlenie procesu nie powiodlo sie\n");
  19.             exit(1);
  20.         case 0:
  21.             komunikat = "Jestem potomkiem";
  22.             powtorzen = 5;
  23.             break;
  24.         default:
  25.             komunikat = "Jestem rodzicem";
  26.             powtorzen = 5;
  27.             break;
  28.     }
  29.     for (; powtorzen > 0; powtorzen--)
  30.     {
  31.         puts(komunikat);
  32.         sleep(10);
  33.     }
  34. }
  35.  
  36. ----------------------------------------------
  37.  
  38. #include <sys/types.h>
  39. #include <unistd.h>
  40. #include <stdio.h>
  41. #include <stdlib.h>
  42.  
  43. //odczytywanie PIDa potomka, obecnego procesu i rodzica
  44.  
  45. const int DL_NAPISU=80;
  46.  
  47. int main(int argc, char** argv)
  48. {
  49.     pid_t pid_potomka,pid_moj,pid_rodzica;
  50.     char komunikat[DL_NAPISU];
  51.     int powtorzen;
  52.     printf("Na razie dziaĹ‚a jeden proces\n");
  53.     pid_potomka = fork();
  54.     pid_rodzica=getppid();
  55.     pid_moj=getpid();
  56.     switch (pid_potomka)
  57.     {
  58.         case -1:
  59.             perror("rozwidlenie procesu nie powiodĹ‚o siÄ™");
  60.             exit(1);
  61.         case 0:
  62.             snprintf(komunikat,DL_NAPISU,"Jestem potomkiem, PID potomka = %d, moj PID=%d a PID rodzica =%d",
  63.                     pid_potomka,pid_moj,pid_rodzica);
  64.             powtorzen = 5;
  65.             break;
  66.         default:
  67.             snprintf(komunikat,DL_NAPISU,"Jestem rodzicem, PID potomka = %d, moj PID=%d a PID rodzica =%d",
  68.                     pid_potomka,pid_moj,pid_rodzica);
  69.             powtorzen = 5;
  70.             break;
  71.     }
  72.     for (; powtorzen > 0; powtorzen--)
  73.     {
  74.         puts(komunikat);
  75.         sleep(1);
  76.     }
  77. }
  78.  
  79. --------------------------------------------------------
  80.  
  81. #include <sys/types.h>
  82. #include <unistd.h>
  83. #include <stdio.h>
  84. #include <stdlib.h>
  85.  
  86. //zombie - potomek konczy wykonywanie wczesniej
  87. //sierota - rodzic konczy wykonywanie wczesniej
  88.  
  89. const int DL_NAPISU=80;
  90.  
  91. int main(int argc, char** argv)
  92. {
  93.     pid_t pid_potomka,pid_moj,pid_rodzica;
  94.     char komunikat[DL_NAPISU];
  95.     int powtorzen;
  96.     printf("Na razie dziala jeden proces\n");
  97.     pid_potomka = fork();
  98.     pid_rodzica=getppid();
  99.     pid_moj=getpid();
  100.     switch (pid_potomka)
  101.     {
  102.         case -1:
  103.             perror("rozwidlenie procesu nie powiodlo sie\n);
  104.            exit(1);
  105.        case 0:
  106.            snprintf(komunikat,DL_NAPISU,"Jestem potomkiem, PID potomka = %d, moj PID=%d a PID mojego rodzica =%d",
  107.                    pid_potomka,pid_moj,pid_rodzica);
  108.            powtorzen = 1;
  109.            break;
  110.        default:
  111.            snprintf(komunikat,DL_NAPISU,"Jestem rodzicem, PID potomka = %d, moj PID=%d a PID mojego rodzica =%d",
  112.                    pid_potomka,pid_moj,pid_rodzica);
  113.            powtorzen =3;
  114.            break;
  115.    }
  116.    for (; powtorzen > 0; powtorzen--)
  117.    {
  118.        puts(komunikat);
  119.        sleep(1);
  120.    }
  121.    switch (pid_potomka)
  122.    {   //wyswietlany listy procesow tuz przed zakonczeniem - dzieki temu mozna zaobserwowac status zombie
  123.        case 0: system("ps -ef | grep fork3 | grep -v grep");
  124.                printf("Jestem potomkiem i koncze wykonanie\n");
  125.                break;
  126.        default: system("ps -ef | grep fork3 | grep -v grep");
  127.                 printf("Jetem rodzicem i koncze wykonanie\n");
  128.                 break;
  129.    }
  130. }
  131.  
  132. ---------------------------------------------
  133.  
  134. #include <sys/types.h>
  135. #include <sys/wait.h>
  136. #include <unistd.h>
  137. #include <stdio.h>
  138. #include <stdlib.h>
  139.  
  140. //zombie - potomek konczy wykonywanie wczesniej
  141. //sierota - rodzic konczy wykonywanie wczesniej
  142. //pasywne czekanie na zakonczenie potomka - rodzic jest blokowany
  143.  
  144. const int DL_NAPISU=80;
  145.  
  146. int main(int argc, char** argv)
  147. {
  148.    pid_t pid_potomka,pid_moj,pid_rodzica;
  149.    char komunikat[DL_NAPISU];
  150.    int powtorzen;
  151.    int status=0;
  152.    printf("Na razie dziala jeden proces\n");
  153.    pid_potomka = fork();
  154.    pid_rodzica=getppid();
  155.    pid_moj=getpid();
  156.    switch (pid_potomka)
  157.    {
  158.        case -1:
  159.            perror("rozwidlenie procesu nie powiodlo sie\n");
  160.            exit(1);
  161.        case 0:
  162.            snprintf(komunikat,DL_NAPISU,"Jestem potomkiem, PID potomka = %d, moj PID=%d a PID mojego rodzica =%d",
  163.                    pid_potomka,pid_moj,pid_rodzica);
  164.            powtorzen = 15;
  165.            break;
  166.        default:
  167.            snprintf(komunikat,DL_NAPISU,"Jestem rodzicem, PID potomka = %d, moj PID=%d a PID mojego rodzica =%d",
  168.                    pid_potomka,pid_moj,pid_rodzica);
  169.            powtorzen = 5;
  170.            break;
  171.    }
  172.    for (; powtorzen > 0; powtorzen--)
  173.    {
  174.        puts(komunikat);
  175.        sleep(1);
  176.    }
  177.    switch (pid_potomka)
  178.    {   //wyswietlamy listy procesow tuz przed zakonczeniem - obserwujemy status zombie
  179.        case 0: system("ps aux | grep fork");
  180.                printf("Jestem potomkiem i koncze wykonanie\n");
  181.                break;
  182.        default: printf("Jestem rodzicem i czekam na zakonczenie potomka\n");
  183.                 //rodzic jest blokowany
  184.                 pid_potomka=wait(&status);
  185.                 printf("Jestem rodzicem, potomek o PID=%d wlasnie sie zakonczyl\n",pid_potomka);
  186.                 system("ps aux | grep fork");
  187.                 printf("Jetem rodzicem i koncze wykonanie\n");
  188.                 break;
  189.    }
  190. }
  191. .
  192. .
  193. .
  194. .
  195. default: pid_potomka=0;
  196.                 //czekamy w petli na zakonczenie potomka - rodzic tez pracuje
  197. while (pid_potomka==0){
  198. printf("Jestem rodzicem i czekam na zakończenie potomka\n");
  199.                        pid_potomka=waitpid(-1,       //dowolny proces potomny
  200.                             &status,   //status
  201.                           WNOHANG); //nie zatrzymuje procesu wywolujacego
  202.                        sleep(1);}
  203.                 printf("Jestem rodzicem, potomek o PID=%d wlasnie sie zakonczyl\n",pid_potomka);
  204.                 //system("ps aux | grep fork");
  205.                 printf("Jestem rodzicem i koncze wykonanie\n");
  206.                 break;
  207.  
  208. ---------------------------
  209.  
  210. SYGNAŁY
  211.  
  212. #include <signal.h>
  213. #include <stdio.h>
  214. #include <unistd.h>
  215.  
  216. //podstawowa wersja programu wyswietla cykliczne 3 napisy po nacisnieciu CTRL+C
  217. //zakonczenie programu CTRL+\ (SIGQUIT)
  218.  
  219. char napisy[3][80]={"Ha! Ha! Ha! To tylko sygnal‚ powierzchowny!\n",
  220.                    "Tylko proces %d smieje sie sygnalowi %d prosto w twarz!\n",
  221.                    "Auc - to bolalo!\n"};
  222. int nr_napisu=0;
  223.  
  224. void obsluga_sig_int(int sig)
  225. {
  226.    printf(napisy[nr_napisu],getpid(),sig);
  227.    nr_napisu=((nr_napisu + 1) % 3);
  228. }
  229.  
  230. int main(int argc, char** argv)
  231. {
  232.    signal(SIGINT,obsluga_sig_int);
  233.    
  234.    while (true)
  235.    {
  236.        printf("Czesc tu proces: %d\n",getpid());
  237.        sleep(1);
  238.    }
  239.    
  240.    return 0;
  241. }
  242.  
  243.  
  244. ------------------------------
  245. #include <stdlib.h>
  246. #include <signal.h>
  247. #include <stdio.h>
  248. #include <unistd.h>
  249.  
  250. //podstawowy program zmodyfikowany tak aby konczyc sie po 4-tym nacisnieciu CTRL+C
  251. char napisy[3][80]={"Ha! Ha! Ha! To tylko sygnal‚ powierzchowny!\n",
  252.                    "Tylko proces %d smieje sie sygnalowi %d prosto w twarz!\n",
  253.                    "Auc - to bolalo!\n"};
  254. int nr_napisu=0;
  255.  
  256. void obsluga_sig_int(int sig)
  257. {
  258.    if (nr_napisu==3)
  259.    {
  260.        printf("Dobrze! Dobrze! Juz koncze!\n");
  261.        exit(1);
  262.    }
  263.    printf(napisy[nr_napisu],getpid(),sig);
  264.    nr_napisu++;
  265. }
  266.  
  267. int main(int argc, char** argv)
  268. {
  269.    signal(SIGINT,obsluga_sig_int);
  270.    
  271.    while (true)
  272.    {
  273.        printf("Czesc tu proces: %d\n",getpid());
  274.        sleep(1);
  275.    }
  276.    
  277.    return 0;
  278. }
  279.  
  280.  
  281. --------------------------------
  282.  
  283. #include <stdlib.h>
  284. #include <signal.h>
  285. #include <stdio.h>
  286. #include <unistd.h>
  287.  
  288. //przywracenie domyslnej obslugi CTRL+C za pomoca… SIGQUIT (CTRL+\)
  289.  
  290. char napisy[3][80]={"Ha! Ha! Ha! To tylko sygnal‚ powierzchowny!\n",
  291.                    "Tylko proces %d smieje sie sygnalowi %d prosto w twarz!\n",
  292.                    "Auc - to bolalo!\n"};
  293. int nr_napisu=0;
  294.  
  295. void obsluga_sig_int(int sig)
  296. {
  297.    printf(napisy[nr_napisu],getpid(),sig);
  298.    nr_napisu=(nr_napisu + 1) % 3;
  299. }
  300.  
  301. void obsluga_sig_quit(int sig)
  302. {
  303.    printf("Przywracam domyslna obsluge CTRL+C\n");
  304.    //makro SIG_DFL - domyslna obsluga sygnalu
  305.    signal(SIGINT,SIG_DFL);
  306. }
  307.  
  308. int main(int argc, char** argv)
  309. {
  310.    signal(SIGINT,obsluga_sig_int);
  311.    signal(SIGQUIT,obsluga_sig_quit);
  312.    
  313.    while (true)
  314.    {
  315.        printf("Czesc tu proces: %d\n",getpid());
  316.        sleep(1);
  317.    }
  318.    
  319.    return 0;
  320. }
  321.  
  322. ----------------------------------
  323.  
  324. #include <stdlib.h>
  325. #include <signal.h>
  326. #include <stdio.h>
  327. #include <unistd.h>
  328.  
  329. //przywracenie domyslnej obslugi CTRL+C za pomoca alarmu
  330.  
  331. char napisy[3][80]={"Ha! Ha! Ha! To tylko sygnal‚ powierzchowny!\n",
  332.                    "Tylko proces %d smieje sie sygnalowi %d prosto w twarz!\n",
  333.                    "Auc - to bolalo!\n"};
  334. int nr_napisu=0;
  335.  
  336. void obsluga_sig_int(int sig)
  337. {
  338.    printf(napisy[nr_napisu],getpid(),sig);
  339.    nr_napisu=(nr_napisu + 1) % 3;
  340. }
  341.  
  342. void obsluga_sig_alrm(int sig)
  343. {
  344.    printf("Ding! Ding! - Przywracam standardowy CTRL+C\n");
  345.    signal(SIGINT,SIG_DFL);
  346. }
  347.  
  348. int main(int argc, char** argv)
  349. {
  350.    signal(SIGINT,obsluga_sig_int);
  351.    signal(SIGALRM,obsluga_sig_alrm);
  352.    
  353.    //przywracamy domyslna obsluga po 15 sekundach
  354.    alarm(15);
  355.    
  356.    while (true)
  357.    {
  358.        printf("Czesc tu proces: %d\n",getpid());
  359.        sleep(1);
  360.    }
  361.    
  362.    return 0;
  363. }
  364.  
  365. ------------------------------------
  366.  
  367. SYSTEMY PLIKOW
  368.  
  369. #include <sys/types.h>
  370. #include <unistd.h>
  371. #include <stdio.h>
  372. #include <stdlib.h>
  373.  
  374. //odczytywanie PID, UID i GID procesu
  375.  
  376. int main(int argc, char** argv)
  377. {
  378.    pid_t pid;
  379.    uid_t uid;
  380.    gid_t gid;
  381.    uid_t euid;
  382.    gid_t egid;
  383.    pid=getpid();
  384.    uid=getuid();
  385.    gid=getgid();
  386.    euid=geteuid();
  387.    egid=getegid();
  388.    system("id");
  389.    printf("MĂłj numer procesu to PID=%d\n",pid);
  390.    printf("Rzeczywisty identyfikator uzytkownika UID=%d i grupy GID=%d\n",uid,gid);
  391.    printf(" Efektywny identyfikator uzytkownika UID=%d i grupy GID=%d\n",euid,egid);
  392.    system("id");
  393.  
  394.    setuid(0);
  395.    setgid(0);
  396.    seteuid(0);
  397.    setegid(0);
  398.    uid=getuid();
  399.    gid=getgid();
  400.    euid=geteuid();
  401.    egid=getegid();
  402.    printf("Rzeczywisty identyfikator uzytkownika UID=%d i grupy GID=%d\n",uid,gid);
  403.    printf(" Efektywny identyfikator uzytkownika UID=%d i grupy GID=%d\n",euid,egid);
  404.    system("id");
  405.  
  406.    setuid(500);
  407.    setgid(500);
  408.    seteuid(500);
  409.    setegid(500);
  410.    uid=getuid();
  411.    gid=getgid();
  412.    euid=geteuid();
  413.    egid=getegid();
  414.    printf("Rzeczywisty identyfikator uzytkownika UID=%d i grupy GID=%d\n",uid,gid);
  415.    printf(" Efektywny identyfikator uzytkownika UID=%d i grupy GID=%d\n",euid,egid);
  416.    system("id");
  417. }
  418.  
  419. ------------------------
  420.  
  421. #include <sys/types.h>
  422. #include <stdio.h>
  423. #include <stdlib.h>
  424. #include <unistd.h>
  425. #include <iostream>
  426. #include <string.h>
  427. using namespace std;
  428.  
  429. //zombie - potomek konczy wykowanie wczesniej
  430. //sierota - rodzic konczy wykonanie wczesniej
  431.  
  432. int main(int argc, char** argv, char **envp)
  433. {
  434.    pid_t pid_potomka,pid_moj,pid_rodzica;
  435.    printf("Na razie dziala jeden proces\n");
  436.  
  437.    char something[40];
  438.  
  439.    char katalog[150];
  440.    getcwd(katalog, 150);
  441.    printf("katalog biezacy to %s\n",katalog);
  442.  
  443.    pid_potomka = fork();
  444.    pid_rodzica=getppid();
  445.    pid_moj=getpid();
  446.    switch (pid_potomka)
  447.    {
  448.        case -1:
  449.            perror("rozwidlenie procesu nie powiodĹ‚o siÄ™");
  450.            exit(1);
  451.        case 0:
  452.            printf("Jestem potomkiem, PID potomka = %d, moj PID=%d a PID mojego rodzica =%d\n",
  453.                    pid_potomka,pid_moj,pid_rodzica);
  454.            getcwd(katalog, sizeof(katalog));
  455.            printf("katalog biezacy potomka to %s\n",katalog);
  456.            if (argv[1] == NULL)
  457.                {
  458.                    printf("Nie podales nazwy katalogu jako argumentu wywolania programu\n");
  459.                    exit(1);
  460.                }
  461.            else
  462.         {
  463.                    strcpy(katalog,argv[1]);
  464.                 cout << "Enter your name: ";
  465.                 cin >> something;
  466.                 cout<<"Podales: "<<something<<"\n";
  467.                 }  
  468.            //chdir("/home/maciejp/Pulpit");
  469.            //printf("podaj nazwe katalogu: ");
  470.         //cin>>katalog;
  471.  
  472.            chdir(katalog);
  473.  
  474.            getcwd(katalog, sizeof(katalog));
  475.            printf("Nowa wartosc katlogu roboczego odczytanego przez getcwd() to: %s\n",katalog);
  476.            sleep(5);
  477.            break;
  478.        default:
  479.            printf("Jestem rodzicem, PID potomka = %d, moj PID=%d a PID mojego rodzica =%d - koncze dzialanie\n",
  480.                    pid_potomka,pid_moj,pid_rodzica);
  481.            sleep(1);
  482.            break;
  483.    }
  484. }
  485.  
  486. -------------------------------------
  487.  
  488. #include <sys/types.h>
  489. #include <unistd.h>
  490. #include <stdio.h>
  491. #include <stdlib.h>
  492. #include <unistd.h>
  493. #include <iostream>
  494. #include <string.h>
  495. #include <sys/stat.h>
  496. using namespace std;
  497.  
  498. int main(int argc, char** argv, char **envp)
  499. {
  500.    char *ptr;
  501.  
  502.    if ( (ptr = getenv("HOME")) == (char *) 0)
  503.        printf("HOME nie jest zdefiniowana\n");
  504.    else
  505.        printf("HOME=%s\n",ptr);
  506.    exit(0);
  507. }
  508.  
  509.  
  510. ------------------------------
  511.  
  512. #include <sys/types.h>
  513. #include <sys/stat.h>
  514. #include <unistd.h>
  515. #include <stdio.h>
  516.  
  517. int main(int argc, char *argv[])
  518. {
  519.    struct stat sb;
  520.    int ret;
  521.  
  522.    if (argc < 2)
  523.    {
  524.        fprintf(stderr, "Uzycie programu:%s <nazwa pliku>\n", argv[0]);
  525.        return 1;
  526.    }
  527.    ret=stat(argv[1], &sb);
  528.    if (ret)
  529.    {
  530.        perror("stat");
  531.        return 1;
  532.    }
  533.    printf("%s ma rozmiar %ld bajtow\n", argv[1], sb.st_size);
  534.    return 0;
  535. }
  536. -----------------------------
Add Comment
Please, Sign In to add comment