Advertisement
Guest User

Untitled

a guest
Nov 24th, 2014
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.53 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <fcntl.h>
  3. #include <unistd.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9.     int zwrot = strcmp(argv[1],"zwrot");
  10.     int kopia = strcmp(argv[1],"kopia");
  11.     int historia = strcmp(argv[1],"history");
  12.     int all = strcmp(argv[2],"all");
  13.     if(strcmp(argv[1],"creat")==0)
  14.     {
  15.         mkfifo(argv[2],0666);
  16.         strcat(argv[2],".txt");
  17.         creat(argv[2],0666);
  18.         return 0;
  19.     }
  20.     if(strcmp(argv[2],"dodaj")==0)
  21.     {
  22.         strcat(argv[1],".txt");
  23.         int wejscie = open(argv[1],O_WRONLY | O_APPEND,0666);
  24.         if(wejscie ==-1)
  25.         {
  26.             printf("nie ma takiego uzytkownika\n");
  27.             return 0;
  28.         }
  29.         else
  30.         {
  31.             dup2(wejscie,1);
  32.             printf("%s\n",argv[3]);
  33.             close(wejscie);
  34.         }
  35.         return 0;
  36.     }
  37.     if(strcmp(argv[2],"usun")==0)
  38.         {
  39.             strcat(argv[1],".txt");
  40.             int wejscie = open(argv[1],O_RDONLY,0666);
  41.             if(wejscie ==-1)
  42.             {
  43.                 printf("nie ma takiego uzytkownika\n");
  44.                 return 0;
  45.             }
  46.             int tab[2];
  47.             pipe(tab);
  48.             int a = fork();
  49.             switch(a)
  50.             {
  51.                 case 0:
  52.                 {
  53.                     char znak;
  54.                     char nickname[25];
  55.                     int i=0;
  56.                     while(read(wejscie,&znak,1)==1)
  57.                     {
  58.                         nickname[i]=znak;
  59.                         i++;
  60.                         if(znak=='\n')
  61.                         {
  62.                             nickname[i-1]='\0';
  63.                             if(strcmp(nickname,argv[3])!=0)
  64.                             {
  65.                                 dup2(tab[1],1);
  66.                                 close(tab[0]);
  67.                                 printf("%s\n",nickname);
  68.                             }
  69.                         i=0;
  70.                         }
  71.                     }
  72.                 close(wejscie);
  73.                 break;
  74.                 }
  75.                 default:
  76.                 {
  77.                     wait(NULL);
  78.                     close(tab[1]);
  79.                     char buffor[30];
  80.                     char znak;
  81.                     int nowy = open(argv[1],O_WRONLY | O_TRUNC,0666);
  82.                     while(read(tab[0],&znak,1)==1)
  83.                     {
  84.                         printf("%c",znak);
  85.                         write(nowy,&znak,1);
  86.                     }
  87.                     close(nowy);
  88.                 }
  89.             }
  90.         return 0;
  91.         }  
  92.     if(historia == 0)
  93.     {
  94.         int a = fork();
  95.         if(a>0)
  96.         {
  97.             char buff;
  98.             int wyjscie = open (argv[2],O_RDONLY);
  99.             while(read(wyjscie,&buff,1)==1)
  100.             {
  101.                 printf("%c",buff);
  102.             }
  103.             close(wyjscie);
  104.         }
  105.         if(a==0);
  106.     }
  107.    
  108.     if(kopia == 0)
  109.     {
  110.         int i,j,a[argc];
  111.         for(i=2;i<argc-1;i++)
  112.         {
  113.             mkfifo(argv[i],0666);
  114.             a[i]=fork();
  115.             if(a[i]==0)
  116.             {
  117.                 int wejscie = open(argv[i],O_WRONLY);
  118.                 dup2(wejscie,1);
  119.                 if(i==2)
  120.                 {
  121.                     printf("Wyslano wiadomosc do:");
  122.                     for(j=3;j<argc-1;j++)
  123.                     {
  124.                         printf(" %s", argv[j]);
  125.                     }
  126.                     printf("o tresci:'%s'\n",argv[argc-1]);
  127.                 }
  128.                 else
  129.                 printf("Wiadomosc od %s: %s\n",argv[2],argv[argc-1]);
  130.                 close(wejscie);
  131.                 break;
  132.             }
  133.         }
  134.         return 0;
  135.     }
  136.     if(zwrot == 0)
  137.     {
  138.         int i,j,a[argc],b[argc];
  139.         for(i=3;i<argc-1;i++)
  140.         {
  141.             mkfifo(argv[i],0666);
  142.             a[i]=fork();
  143.             if(a[i]==0)
  144.             {
  145.                 b[i] = fork();
  146.                 if(b[i]==0)
  147.                 {
  148.                     int wejscie = open(argv[i],O_WRONLY);
  149.                     dup2(wejscie,1);
  150.                     printf("Wiadomosc od %s: %s\n",argv[2],argv[argc-1]);
  151.                     close(wejscie);
  152.                     break;
  153.                 }
  154.                 if(b[i]>0)
  155.                 {
  156.                     wait(NULL);
  157.                     mkfifo(argv[2],0666);
  158.                     int nadawca = open(argv[2],O_WRONLY);
  159.                     dup2(nadawca,1);
  160.                     printf("%s odczytal wiadomosc.\n",argv[i]);
  161.                     close(nadawca);
  162.                     break;
  163.                 }
  164.             }
  165.         }
  166.         return 0;
  167.     }
  168.     if(all==0)
  169.     {
  170.         char nadaje[25];
  171.         strcpy(nadaje,argv[1]);
  172.         strcat(argv[1],".txt");
  173.         char znak;
  174.         int i = 0;
  175.         int j,k;
  176.         char nickname[25];
  177.         int nadawca = open(argv[1],O_RDONLY);
  178.         if(nadawca==-1)
  179.         {
  180.             printf("nie ma takiego nadawcy, wybierz innego\n");
  181.             return 0;
  182.         }
  183.         else
  184.         {
  185.             while(read(nadawca,&znak,1)==1)
  186.             {
  187.                 nickname[i]=znak;
  188.                 if(znak=='\n')
  189.                 {
  190.                     nickname[i]='\0';
  191.                     mkfifo(nickname,0666);
  192.                     int a=fork();
  193.                     i=-1;
  194.                     if(a==0)
  195.                     {
  196.                         int wejscie = open(nickname,O_WRONLY);
  197.                         dup2(wejscie,1);
  198.                         printf("Wiadomosc od: %s o tresci: %s\n",nadaje,argv[argc-1]);
  199.                         close(wejscie);
  200.                         break;
  201.                     }
  202.                     if(a>0);
  203.                 }
  204.                 i++;
  205.             }
  206.         }
  207.         return 0;
  208.     }
  209.     if(historia!=0 && zwrot!=0 && kopia!=0)
  210.     {
  211.         int i,j,a[argc];
  212.         for(i=2;i<argc-1;i++)
  213.         {
  214.             mkfifo(argv[i],0666);
  215.             a[i]=fork();
  216.             if(a[i]==0)
  217.             {
  218.                 int wejscie = open(argv[i],O_WRONLY);
  219.                 dup2(wejscie,1);
  220.                 printf("Wiadomosc od %s: %s\n",argv[1],argv[argc-1]);
  221.                 close(wejscie);
  222.                 break;
  223.             }
  224.         }
  225.         return 0;
  226.     }
  227. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement