Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- KLICENT.C
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define ROZM_BUF 2048
- int main(int argc, char** argv)
- {
- int dlugosc,x,i,j;
- FILE *wynik_polecania = popen("./serwer", "r");
- if(wynik_polecania)
- {
- char bufor[ROZM_BUF];
- fgets(bufor, ROZM_BUF, wynik_polecania);
- dlugosc=strlen(bufor);
- while(!feof(wynik_polecania))
- {
- printf("Odebrano od serwera: %c\n",bufor[dlugosc-2]);
- fgets(bufor, ROZM_BUF, wynik_polecania);
- }
- pclose(wynik_polecania);
- fflush(stdout);
- return EXIT_SUCCESS;
- }
- else
- {
- printf("nie udalo sie wykonac funkcji popen\n");
- fflush(stdout);
- return EXIT_SUCCESS;
- }
- }
- SERWER.C
- #include <stdio.h>
- #include <stdlib.h>
- int main(int argc, char** argv)
- {
- int i;
- for(i=0; i<10; ++i)
- printf("Linia z serwera nr %d\n", i);
- fflush(stdout);
- return (EXIT_SUCCESS);
- }
- #include<stdio.h>
- #include<stdlib.h>
- #include<unistd.h>
- #include<sys/types.h>
- #include<string.h>
- #include<sys/wait.h>
- #define ROZM_BUF 2048
- int main(int argc, char** argv)
- {
- int fd1[2];
- int fd2[2];// Used to store two ends of first pipe
- pid_t p;
- if (pipe(fd1)==-1)
- {
- fprintf(stderr, "Pipe Failed" );
- return 1;
- }
- if (pipe(fd2)==-1)
- {
- fprintf(stderr, "Pipe Failed" );
- return 1;
- }
- p=fork();
- char komunikat[ROZM_BUF];
- char temp[ROZM_BUF];
- int i;
- char bufor[ROZM_BUF];
- switch(p)
- {
- case -1:
- printf("rozwidlenie procesu nie powiodło się\n");
- exit(1);
- case 0:
- close(fd1[0]);
- for(i=0; i<10; ++i)
- {
- snprintf(temp,ROZM_BUF,"Linia z serwera nr %d\n", i);
- strcat(komunikat, temp);
- }
- write(fd1[1], komunikat, strlen(komunikat)+1);
- close(fd1[1]);
- exit(0);
- break;
- default:
- wait(NULL);
- close(fd1[1]);
- read(fd1[0], bufor, ROZM_BUF);
- // dlugosc=strlen(bufor);
- printf("Odebrano od serwera: %s\n",bufor);
- close(fd1[0]);
- }
- }
- // C program to demonstrate use of fork() and pipe()
- #include<stdio.h>
- #include<stdlib.h>
- #include<unistd.h>
- #include<sys/types.h>
- #include<string.h>
- #include<sys/wait.h>
- int main()
- {
- // We use two pipes
- // First pipe to send input string from parent
- // Second pipe to send concatenated string from child
- int fd1[2]; // Used to store two ends of first pipe
- int fd2[2]; // Used to store two ends of second pipe
- char fixed_str[] = "forgeeks.org";
- char input_str[100];
- pid_t p;
- if (pipe(fd1)==-1)
- {
- fprintf(stderr, "Pipe Failed" );
- return 1;
- }
- if (pipe(fd2)==-1)
- {
- fprintf(stderr, "Pipe Failed" );
- return 1;
- }
- scanf("%s", input_str);
- p = fork();
- if (p < 0)
- {
- fprintf(stderr, "fork Failed" );
- return 1;
- }
- // Parent process
- else if (p > 0)
- {
- char concat_str[100];
- close(fd1[0]); // Close reading end of first pipe
- // Write input string and close writing end of first
- // pipe.
- write(fd1[1], input_str, strlen(input_str)+1);
- close(fd1[1]);
- // Wait for child to send a string
- wait(NULL);
- close(fd2[1]); // Close writing end of second pipe
- // Read string from child, print it and close
- // reading end.
- read(fd2[0], concat_str, 100);
- printf("Concatenated string %s\n", concat_str);
- close(fd2[0]);
- }
- // child process
- else
- {
- close(fd1[1]); // Close writing end of first pipe
- // Read a string using first pipe
- char concat_str[100];
- read(fd1[0], concat_str, 100);
- // Concatenate a fixed string with it
- int k = strlen(concat_str);
- int i;
- for (i=0; i<strlen(fixed_str); i++)
- concat_str[k++] = fixed_str[i];
- concat_str[k] = '\0'; // string ends with '\0'
- // Close both reading ends
- close(fd1[0]);
- close(fd2[0]);
- // Write concatenated string and close writing end
- write(fd2[1], concat_str, strlen(concat_str)+1);
- close(fd2[1]);
- exit(0);
- }
- }
- // C program to implement one side of FIFO
- // This side reads first, then reads
- #include <stdio.h>
- #include <string.h>
- #include <fcntl.h>
- #include <sys/stat.h>
- #include <sys/types.h>
- #include <unistd.h>
- int main()
- {
- int fd1;
- // FIFO file path
- char * myfifo = "/tmp/myfifo";
- // Creating the named file(FIFO)
- // mkfifo(<pathname>,<permission>)
- mkfifo(myfifo, 0666);
- char str1[80], str2[80];
- while (1)
- {
- // First open in read only and read
- fd1 = open(myfifo,O_RDONLY);
- read(fd1, str1, 80);
- // Print the read string and close
- printf("User1: %s\n", str1);
- close(fd1);
- // Now open in write mode and write
- // string taken from user.
- fd1 = open(myfifo,O_WRONLY);
- fgets(str2, 80, stdin);
- write(fd1, str2, strlen(str2)+1);
- close(fd1);
- }
- return 0;
- }
- #include <sys/types.h>
- #include <unistd.h>
- #include <stdio.h>
- #include <stdlib.h>
- //odczytywanie PIDa potomka, obecnego procesu i rodzica
- const int DL_NAPISU=80;
- int main(int argc, char** argv)
- {
- pid_t pid_potomka,pid_moj,pid_rodzica;
- char komunikat[DL_NAPISU];
- int powtorzen;
- printf("Na razie działa jeden proces\n");
- pid_potomka = fork();
- pid_rodzica=getppid();
- pid_moj=getpid();
- switch (pid_potomka)
- {
- case -1:
- perror("rozwidlenie procesu nie powiodło się");
- exit(1);
- case 0:
- snprintf(komunikat,DL_NAPISU,"Jestem potomkiem, PID potomka = %d, moj PID=%d a PID rodzica =%d",
- pid_potomka,pid_moj,pid_rodzica);
- powtorzen = 5;
- break;
- default:
- snprintf(komunikat,DL_NAPISU,"Jestem rodzicem, PID potomka = %d, moj PID=%d a PID rodzica =%d",
- pid_potomka,pid_moj,pid_rodzica);
- powtorzen = 5;
- break;
- }
- for (; powtorzen > 0; powtorzen--)
- {
- puts(komunikat);
- sleep(1);
- }
- }
- #include <sys/types.h>
- #include <unistd.h>
- #include <stdio.h>
- #include <stdlib.h>
- //zombie - potomek kończy wykowanie wcześniej
- //sierota - rodzic kończy wykonanie wcześniej
- const int DL_NAPISU=80;
- int main(int argc, char** argv)
- {
- pid_t pid_potomka,pid_moj,pid_rodzica;
- char komunikat[DL_NAPISU];
- int powtorzen;
- printf("Na razie działa jeden proces\n");
- pid_potomka = fork();
- pid_rodzica=getppid();
- pid_moj=getpid();
- switch (pid_potomka)
- {
- case -1:
- perror("rozwidlenie procesu nie powiodło się");
- exit(1);
- case 0:
- snprintf(komunikat,DL_NAPISU,"Jestem potomkiem, PID potomka = %d, moj PID=%d a PID mojego rodzica =%d",
- pid_potomka,pid_moj,pid_rodzica);
- powtorzen = 1;
- break;
- default:
- snprintf(komunikat,DL_NAPISU,"Jestem rodzicem, PID potomka = %d, moj PID=%d a PID mojego rodzica =%d",
- pid_potomka,pid_moj,pid_rodzica);
- powtorzen =3;
- break;
- }
- for (; powtorzen > 0; powtorzen--)
- {
- puts(komunikat);
- sleep(1);
- }
- switch (pid_potomka)
- { //wyświetlamy listy procesów tuż przed zakończeniem - dzięki temu można zaobserwować status zombie
- case 0: system("ps -ef | grep fork3 | grep -v grep");
- printf("Jestem potomkiem i kończę wykonanie\n");
- break;
- default: system("ps -ef | grep fork3 | grep -v grep");
- printf("Jetem rodzicem i kończę wykonanie\n");
- break;
- }
- }
- #include <sys/types.h>
- #include <sys/wait.h>
- #include <unistd.h>
- #include <stdio.h>
- #include <stdlib.h>
- //zombie - potomek kończy wykowanie wcześniej
- //sierota - rodzic kończy wykonanie wcześniej
- //pasywne czekanie na zakończenie potomka - rodzic jest blokowany
- const int DL_NAPISU=80;
- int main(int argc, char** argv)
- {
- pid_t pid_potomka,pid_moj,pid_rodzica;
- char komunikat[DL_NAPISU];
- int powtorzen;
- int status=0;
- printf("Na razie działa jeden proces\n");
- pid_potomka = fork();
- pid_rodzica=getppid();
- pid_moj=getpid();
- switch (pid_potomka)
- {
- case -1:
- perror("rozwidlenie procesu nie powiodło się");
- exit(1);
- case 0:
- snprintf(komunikat,DL_NAPISU,"Jestem potomkiem, PID potomka = %d, moj PID=%d a PID mojego rodzica =%d",
- pid_potomka,pid_moj,pid_rodzica);
- powtorzen = 15;
- break;
- default:
- snprintf(komunikat,DL_NAPISU,"Jestem rodzicem, PID potomka = %d, moj PID=%d a PID mojego rodzica =%d",
- pid_potomka,pid_moj,pid_rodzica);
- powtorzen = 5;
- break;
- }
- for (; powtorzen > 0; powtorzen--)
- {
- puts(komunikat);
- sleep(1);
- }
- switch (pid_potomka)
- { //wyświetlamy listy procesów tuż przed zakończeniem - dzięki temu można zaobserwować status zombie
- case 0: system("ps aux | grep fork");
- printf("Jestem potomkiem i kończę wykonanie\n");
- break;
- default: printf("Jestem rodzicem i czekam na zakończenie potomka\n");
- //rodzic jest blokowany
- pid_potomka=wait(&status);
- printf("Jestem rodzicem, potomek o PID=%d właśnie się zakończył\n",pid_potomka);
- system("ps aux | grep fork");
- printf("Jetem rodzicem i kończę wykonanie\n");
- break;
- }
- }
- #include <sys/types.h>
- #include <sys/wait.h>
- #include <unistd.h>
- #include <stdio.h>
- #include <stdlib.h>
- //zombie - potomek kończy wykowanie wcześniej
- //sierota - rodzic kończy wykonanie wcześniej
- //aktywne czekanie na zakończenie potomka
- const int DL_NAPISU=80;
- int main(int argc, char** argv)
- {
- pid_t pid_potomka,pid_moj,pid_rodzica;
- char komunikat[DL_NAPISU];
- int powtorzen;
- int status=0;
- printf("Na razie działa jeden proces\n");
- pid_potomka = fork();
- pid_rodzica=getppid();
- pid_moj=getpid();
- switch (pid_potomka)
- {
- case -1:
- perror("rozwidlenie procesu nie powiodło się");
- exit(1);
- case 0:
- snprintf(komunikat,DL_NAPISU,"Jestem potomkiem, PID potomka = %d, moj PID=%d a PID mojego rodzica =%d",
- pid_potomka,pid_moj,pid_rodzica);
- powtorzen = 4;
- break;
- default:
- snprintf(komunikat,DL_NAPISU,"Jestem rodzicem, PID potomka = %d, moj PID=%d a PID mojego rodzica =%d",
- pid_potomka,pid_moj,pid_rodzica);
- powtorzen = 2;
- break;
- }
- for (; powtorzen > 0; powtorzen--)
- {
- puts(komunikat);
- sleep(1);
- }
- switch (pid_potomka)
- { //wyświetlamy listy procesów tuż przed zakończeniem - dzięki temu można zaobserwować status zombie
- case 0: //system("ps aux | grep fork");
- printf("Jestem potomkiem i kończę wykonanie\n");
- break;
- default: pid_potomka=0;
- //czekamy w pętli na zakończenie potomka - rodzic też pracować
- while (pid_potomka==0)
- {
- printf("Jestem rodzicem i czekam na zakończenie potomka\n");
- pid_potomka=waitpid(-1, //dowolny proces potomny
- &status, //status
- WNOHANG); //nie zatrzymuje procesu wywołującego
- sleep(1);
- }
- printf("Jestem rodzicem, potomek o PID=%d właśnie się zakończył\n",pid_potomka);
- //system("ps aux | grep fork");
- printf("Jestem rodzicem i kończę wykonanie\n");
- break;
- }
- }
- #include <sys/types.h>
- #include <sys/wait.h>
- #include <unistd.h>
- #include <stdio.h>
- #include <stdlib.h>
- //zombie - potomek kończy wykowanie wcześniej
- //sierota - rodzic kończy wykonanie wcześniej
- //aktywne czekanie na zakończenie potomka
- const int DL_NAPISU=80;
- int main(int argc, char** argv)
- {
- pid_t pid_potomka,pid_moj,pid_rodzica;
- char komunikat[DL_NAPISU];
- int powtorzen;
- int status=0;
- printf("Na razie działa jeden proces\n");
- pid_potomka = fork();
- pid_rodzica=getppid();
- pid_moj=getpid();
- switch (pid_potomka)
- {
- case -1:
- perror("rozwidlenie procesu nie powiodło się");
- exit(1);
- case 0:
- snprintf(komunikat,DL_NAPISU,"Jestem potomkiem, PID potomka = %d, moj PID=%d a PID mojego rodzica =%d",
- pid_potomka,pid_moj,pid_rodzica);
- powtorzen = 15;
- break;
- default:
- snprintf(komunikat,DL_NAPISU,"Jestem rodzicem, PID potomka = %d, moj PID=%d a PID mojego rodzica =%d",
- pid_potomka,pid_moj,pid_rodzica);
- powtorzen = 5;
- break;
- }
- for (; powtorzen > 0; powtorzen--)
- {
- puts(komunikat);
- sleep(1);
- }
- switch (pid_potomka)
- { //wyświetlamy listy procesów tuż przed zakończeniem - dzięki temu można zaobserwować status zombie
- case 0: system("ps aux | grep fork");
- printf("Jestem potomkiem i kończę wykonanie\n");
- break;
- default: pid_potomka=0;
- //czekamy w pętli na zakończenie potomka - rodzic też pracować
- while (pid_potomka==0)
- {
- printf("Jestem rodzicem i czekam na zakończenie potomka\n");
- pid_potomka=waitpid(-1, //dowolny proces potomny
- &status, //status
- WNOHANG); //nie zatrzymuje procesu wywołującego
- sleep(1);
- }
- printf("Jestem rodzicem, potomek o PID=%d właśnie się zakończył\n",pid_potomka);
- system("ps aux | grep fork");
- printf("Jetem rodzicem i kończę wykonanie\n");
- break;
- }
- }
- #include <sys/types.h>
- #include <unistd.h>
- #include <stdio.h>
- #include <stdlib.h>
- //odczytywanie PID, UID i GID procesu
- int main(int argc, char** argv)
- {
- pid_t pid;
- uid_t uid;
- gid_t gid;
- uid_t euid;
- gid_t egid;
- pid=getpid();
- uid=getuid();
- gid=getgid();
- euid=geteuid();
- egid=getegid();
- system("id");
- printf("MĂłj numer procesu to PID=%d\n",pid);
- printf("Rzeczywisty identyfikator uĹĽytkownika UID=%d i grupy GID=%d\n",uid,gid);
- printf(" Efektywny identyfikator uĹĽytkownika UID=%d i grupy GID=%d\n",euid,egid);
- system("id");
- setuid(0);
- setgid(0);
- seteuid(0);
- setegid(0);
- uid=getuid();
- gid=getgid();
- euid=geteuid();
- egid=getegid();
- printf("Rzeczywisty identyfikator uĹĽytkownika UID=%d i grupy GID=%d\n",uid,gid);
- printf(" Efektywny identyfikator uĹĽytkownika UID=%d i grupy GID=%d\n",euid,egid);
- system("id");
- setuid(500);
- setgid(500);
- seteuid(500);
- setegid(500);
- uid=getuid();
- gid=getgid();
- euid=geteuid();
- egid=getegid();
- printf("Rzeczywisty identyfikator uĹĽytkownika UID=%d i grupy GID=%d\n",uid,gid);
- printf(" Efektywny identyfikator uĹĽytkownika UID=%d i grupy GID=%d\n",euid,egid);
- system("id");
- }
- #include <sys/types.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <iostream>
- #include <string.h>
- using namespace std;
- //zombie - potomek kończy wykowanie wcześniej
- //sierota - rodzic kończy wykonanie wcześniej
- int main(int argc, char** argv, char **envp)
- {
- pid_t pid_potomka,pid_moj,pid_rodzica;
- printf("Na razie działa jeden proces\n");
- char something[40];
- char katalog[150];
- getcwd(katalog, 150);
- printf("katalog biezacy to %s\n",katalog);
- pid_potomka = fork();
- pid_rodzica=getppid();
- pid_moj=getpid();
- switch (pid_potomka)
- {
- case -1:
- perror("rozwidlenie procesu nie powiodło się");
- exit(1);
- case 0:
- printf("Jestem potomkiem, PID potomka = %d, moj PID=%d a PID mojego rodzica =%d\n",
- pid_potomka,pid_moj,pid_rodzica);
- getcwd(katalog, sizeof(katalog));
- printf("katalog biezacy potomka to %s\n",katalog);
- if (argv[1] == NULL)
- {
- printf("Nie podales nazwy katalogu jako argumentu wywolania programu\n");
- exit(1);
- }
- else
- {
- strcpy(katalog,argv[1]);
- cout << "Enter your name: ";
- cin >> something;
- cout<<"Podales: "<<something<<"\n";
- }
- //chdir("/home/maciejp/Pulpit");
- //printf("podaj nazwe katalogu: ");
- //cin>>katalog;
- chdir(katalog);
- getcwd(katalog, sizeof(katalog));
- printf("Nowa wartosc katlogu roboczego odczytanego przez getcwd() to: %s\n",katalog);
- sleep(5);
- break;
- default:
- printf("Jestem rodzicem, PID potomka = %d, moj PID=%d a PID mojego rodzica =%d - koncze dzialanie\n",
- pid_potomka,pid_moj,pid_rodzica);
- sleep(1);
- break;
- }
- }
- #include <sys/types.h>
- #include <unistd.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <iostream>
- #include <string.h>
- #include <sys/stat.h>
- using namespace std;
- //zombie - potomek kończy wykowanie wcześniej
- //sierota - rodzic kończy wykonanie wcześniej
- int main(int argc, char** argv, char **envp)
- {
- pid_t pid_potomka,pid_moj,pid_rodzica;
- printf("Na razie działa jeden proces\n");
- char katalog[150];
- getcwd(katalog, 150);
- printf("katalog biezacy to %s\n",katalog);
- pid_potomka = fork();
- pid_rodzica=getppid();
- pid_moj=getpid();
- switch (pid_potomka)
- {
- case -1:
- perror("rozwidlenie procesu nie powiodło się");
- exit(1);
- case 0:
- printf("Jestem potomkiem, PID potomka = %d, moj PID=%d a PID mojego rodzica =%d\n",
- pid_potomka,pid_moj,pid_rodzica);
- getcwd(katalog, sizeof(katalog));
- printf("katalog biezacy potomka to %s\n",katalog);
- if (argv[1] == NULL)
- {
- printf("Nie podales nazwy katalogu jako argumentu wywolania programu\n");
- exit(1);
- }
- else
- strcpy(katalog,argv[1]);
- //chdir("/home/maciejp/Pulpit");
- mkdir(katalog, 0744);//S_IRWXU | S_IRWXG | S_IRWXO);
- chown(katalog, 500,500);
- chdir(katalog);
- getcwd(katalog, sizeof(katalog));
- printf("Nowa wartosc katlogu roboczego odczytanego przez getcwd() to: %s\n",katalog);
- sleep(5);
- break;
- default:
- printf("Jestem rodzicem, PID potomka = %d, moj PID=%d a PID mojego rodzica =%d - koncze dzialanie\n",
- pid_potomka,pid_moj,pid_rodzica);
- sleep(1);
- break;
- }
- }
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <unistd.h>
- #include <stdio.h>
- int main(int argc, char *argv[])
- {
- struct stat sb;
- int ret;
- if (argc < 2)
- {
- fprintf(stderr, "Uzycie programu:%s <nazwa pliku>\n", argv[0]);
- return 1;
- }
- ret=stat(argv[1], &sb);
- if (ret)
- {
- perror("stat");
- return 1;
- }
- printf("%s ma rozmiar %ld bajtĂłw\n", argv[1], sb.st_size);
- return 0;
- }
- #include <signal.h>
- #include <stdio.h>
- #include <unistd.h>
- //podstawowa wersja programu wyświetla cykliczne 3 napisy po naciśnięciu CTRL+C
- //zakończenie programu CTRL+\ (SIGQUIT)
- char napisy[3][80]={"Ha! Ha! Ha! To tylko sygnał powierzchowny!\n",
- "Tylko proces %d śmieje się sygnałowi %d prosto w twarz!\n",
- "Auć - to bolało!\n"};
- int nr_napisu=0;
- void obsluga_sig_int(int sig)
- {
- printf(napisy[nr_napisu],getpid(),sig);
- nr_napisu=((nr_napisu + 1) % 3);
- }
- int main(int argc, char** argv)
- {
- signal(SIGINT,obsluga_sig_int);
- while (true)
- {
- printf("Cześć tu proces: %d\n",getpid());
- sleep(1);
- }
- return 0;
- }
- #include <stdlib.h>
- #include <signal.h>
- #include <stdio.h>
- #include <unistd.h>
- //podstawowy program zmodyfikowany tak aby kończył się po 4-tym naciśnięciu CTRL+C
- char napisy[3][80]={"Ha! Ha! Ha! To tylko sygnał powierzchowny!\n",
- "Tylko proces %d śmieje się sygnałowi %d prosto w twarz!\n",
- "Auć - to bolało!\n"};
- int nr_napisu=0;
- void obsluga_sig_int(int sig)
- {
- if (nr_napisu==3)
- {
- printf("Dobrze! Dobrze! Już kończę.\n");
- exit(1);
- }
- printf(napisy[nr_napisu],getpid(),sig);
- nr_napisu++;
- }
- int main(int argc, char** argv)
- {
- signal(SIGINT,obsluga_sig_int);
- while (true)
- {
- printf("Cześć tu proces: %d\n",getpid());
- sleep(1);
- }
- return 0;
- }
- #include <stdlib.h>
- #include <signal.h>
- #include <stdio.h>
- #include <unistd.h>
- //przywrócenie domyślnej obsługi CTRL+C za pomocą SIGQUIT (CTRL+\)
- char napisy[3][80]={"Ha! Ha! Ha! To tylko sygnał powierzchowny!\n",
- "Tylko proces %d śmieje się sygnałowi %d prosto w twarz!\n",
- "Auć - to bolało!\n"};
- int nr_napisu=0;
- void obsluga_sig_int(int sig)
- {
- printf(napisy[nr_napisu],getpid(),sig);
- nr_napisu=(nr_napisu + 1) % 3;
- }
- void obsluga_sig_quit(int sig)
- {
- printf("Przywracam domyślną obsługę CTRL+C\n");
- //makro SIG_DFL - domyślna obsługa sygnału
- signal(SIGINT,SIG_DFL);
- }
- int main(int argc, char** argv)
- {
- signal(SIGINT,obsluga_sig_int);
- signal(SIGQUIT,obsluga_sig_quit);
- while (true)
- {
- printf("Cześć tu proces: %d\n",getpid());
- sleep(1);
- }
- return 0;
- }
- #include <stdlib.h>
- #include <signal.h>
- #include <stdio.h>
- #include <unistd.h>
- //przywrócenie domyślnej obsługi CTRL+C za pomocą alarmu
- char napisy[3][80]={"Ha! Ha! Ha! To tylko sygnał powierzchowny!\n",
- "Tylko proces %d śmieje się sygnałowi %d prosto w twarz!\n",
- "Auć - to bolało!\n"};
- int nr_napisu=0;
- void obsluga_sig_int(int sig)
- {
- printf(napisy[nr_napisu],getpid(),sig);
- nr_napisu=(nr_napisu + 1) % 3;
- }
- void obsluga_sig_alrm(int sig)
- {
- printf("Ding! Ding! - Przywracam domyślną obsługę CTRL+C\n");
- signal(SIGINT,SIG_DFL);
- }
- int main(int argc, char** argv)
- {
- signal(SIGINT,obsluga_sig_int);
- signal(SIGALRM,obsluga_sig_alrm);
- //przywracamy domyślną obsługę po 15 sekundach
- alarm(15);
- while (true)
- {
- printf("Cześć tu proces: %d\n",getpid());
- sleep(1);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment