Facebook
From Trivial Elephant, 9 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 821
  1.  
  2. #include <stdio.h>
  3. #include <fcntl.h>
  4. #include <unistd.h>
  5. #include <string.h>
  6. #include <stdlib.h>
  7.  
  8. int main(int argc, char *argv[])
  9. {
  10.  
  11.         if(strcmp(argv[1],"creat")==0)
  12.         {
  13.                 mkfifo(argv[2],0666);
  14.                 strcat(argv[2],".txt");
  15.                 creat(argv[2],0666);
  16.                 return 0;
  17.         }
  18.         if(strcmp(argv[2],"dodaj")==0)
  19.         {
  20.                 strcat(argv[1],".txt");
  21.                 int wejscie = open(argv[1],O_WRONLY | O_APPEND,0666);
  22.                 if(wejscie ==-1)
  23.                 {
  24.                         printf("nie ma takiego uzytkownika\n");
  25.                         return 0;
  26.                 }
  27.                 else
  28.                 {
  29.                         dup2(wejscie,1);
  30.                         printf("%s\n",argv[3]);
  31.                         close(wejscie);
  32.                 }
  33.                 return 0;
  34.         }
  35.         if(strcmp(argv[2],"usun")==0)
  36.         {
  37.                 strcat(argv[1],".txt");
  38.                 int wejscie = open(argv[1], O_RDONLY,0666);
  39.                 if(wejscie ==-1)
  40.                 {
  41.                         printf("nie ma takiego uzytkownika\n");
  42.                         return 0;
  43.                 }
  44.                 int rura[2];
  45.                 pipe(rura);
  46.                 int a=fork();
  47.                 if(a>0)
  48.                 {
  49.                 char tab[25];
  50.                 int i=0;
  51.                 char c;
  52.                 while(read(wejscie,&c,1)==1){
  53.                 tab[i]=c;
  54.                 i++;
  55.                 if(c=='\n')
  56.                  {
  57.                         tab[i-1]='\0';
  58.                         //printf("%s \n",tab);
  59.                         i=0;
  60.                         if(strcmp(tab,argv[3])!=0)
  61.                                 {dup2(rura[1],1);
  62.                                 close(rura[0]);
  63.                                 printf("%s\n",tab);
  64.                                 //write(rura[1],"zenek",5);
  65.                                 }
  66.                 }
  67.                 }
  68.                 close(wejscie);
  69.                 }
  70.                 if(a==0)
  71.                 {
  72.                         int wyjscie=open(argv[1],O_WRONLY | O_TRUNC,0666);
  73.                         char c;
  74.                         close(rura[1]);
  75.                         //char buf[100];
  76.                         //read(rura[0],buf,5);
  77.                         while(read(rura[0],&c,1)==1){
  78.                         write(wyjscie,&c,1);
  79.                         }
  80.                         close(wyjscie);
  81.                         //printf("%s\n",buf);
  82.                 }
  83.                 return 0;
  84.         }
  85.  
  86.  
  87.         if(strcmp(argv[1],"history")==0)
  88.         {
  89.                 char bufforek;
  90.                 int wyjscie = open(argv[2],O_RDONLY);
  91.                 while(read(wyjscie,&bufforek,1)==1)
  92.                 {
  93.                         printf("%c",bufforek);
  94.                 }
  95.                 close(wyjscie);
  96.         return 0;
  97.         }
  98.         if(strcmp(argv[2],"wszyscy")==0)
  99.         {
  100.                 int i=0,k=0;
  101.                 char c;
  102.                 char imiona[30][100];
  103.                 char tab[25];
  104.                 strcat(argv[1],".txt");
  105.                 int kontakt=open(argv[1],O_RDONLY,0666);
  106.                 if(kontakt==-1) {printf("Nie ma takiego uzytkownia"); return 0;}
  107.                 while(read(kontakt,&c,1)==1)
  108.                 {
  109.                         tab[i]=c;
  110.                         i++;
  111.                         if(c=='\n')
  112.                         {
  113.                         tab[i-1]='\0';
  114.                         i=0;
  115.                         strcpy(imiona[k],tab);
  116.                         k++;
  117.                         }
  118.                 }
  119.                 close(kontakt);
  120.                 int a[k];
  121.                 for(i=0;i<k;i++)
  122.                 {
  123.                         mkfifo(imiona[i],0666);
  124.                         a[i]=fork();
  125.                         if(a[i]==0)
  126.                         {
  127.                                 int wejscie = open(imiona[i],O_WRONLY);
  128.                                 dup2(wejscie,1);
  129.                                 printf("\n Wiadomosc od: %s \n%s\n",argv[1],argv[argc-1]);
  130.                                 close(wejscie);
  131.                                 break;
  132.                         }
  133.                 }
  134.                 return 0;
  135.         }
  136.         if(strcmp(argv[1],"-zwrot")==0)
  137.         {       int i;
  138.                 int rodz[argc];
  139.                 int pot[argc];
  140.                 for(i=3;i<argc-1;i++)
  141.                 {
  142.                         mkfifo(argv[i],0666);
  143.                         rodz[i]=fork();
  144.                         if(rodz[i]==0)
  145.                         {
  146.                         pot[i] = fork();
  147.                         if(pot[i]==0)
  148.                         {
  149.                                 int wejscie = open(argv[i],O_WRONLY);
  150.                                 dup2(wejscie,1);
  151.                                 printf("\n Wiadomosc od: %s \n%s\n",argv[2],argv[argc-1]);
  152.                                 close(wejscie);
  153.                                 break;
  154.                         }
  155.                         if(pot[i]>0)
  156.                                 {
  157.                                 wait(NULL);
  158.                                 mkfifo(argv[2],0666);
  159.                                 int zwrot = open(argv[2],O_WRONLY);
  160.                                 dup2(zwrot,1);
  161.                                 printf("Wiadomosc zostala odczytana przez %s\n",argv[i]);
  162.                                 close(zwrot);
  163.                                 break;
  164.                                 }
  165.                         }
  166.                 }
  167.                 return 0;
  168.         }
  169.  
  170.  
  171.  
  172.         else
  173.         {
  174.                 int i;
  175.                 int a[argc];
  176.                 int b[argc];
  177.                 int rozmiar = strlen(argv[argc-1]);
  178.                 for(i=2;i<argc-1;i++)
  179.                 {
  180.                         mkfifo(argv[i],0666);
  181.                         a[i]=fork();
  182.                         if(a[i]==0)
  183.                         {
  184.                                 int wejscie = open(argv[i],O_WRONLY);
  185.                                 dup2(wejscie,1);
  186.                                 if(strcmp(argv[1],"-kopia")==0)
  187.                                 {
  188.                                         if(i==2) printf("\n Kopia wyslanej wiadomosci: %s \n",argv[argc-1]);
  189.                                         else printf("\n Wiadomosc od: %s \n%s\n",argv[2],argv[argc-1]);
  190.                                 }
  191.                                 else printf("\n Wiadomosc od: %s \n%s\n",argv[1],argv[argc-1]);
  192.                                 close(wejscie);
  193.                                 break;
  194.                         }
  195.                        
  196.                 }
  197.                 return 0;
  198.         }
  199.         return 0;
  200. }
  201.