Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <fcntl.h>
- #include <unistd.h>
- #include <string.h>
- #include <stdlib.h>
- int main(int argc, char *argv[])
- {
- int zwrot = strcmp(argv[1],"zwrot");
- int kopia = strcmp(argv[1],"kopia");
- int historia = strcmp(argv[1],"history");
- int all = strcmp(argv[2],"all");
- if(strcmp(argv[1],"creat")==0)
- {
- mkfifo(argv[2],0666);
- strcat(argv[2],".txt");
- creat(argv[2],0666);
- return 0;
- }
- if(strcmp(argv[2],"dodaj")==0)
- {
- strcat(argv[1],".txt");
- int wejscie = open(argv[1],O_WRONLY | O_APPEND,0666);
- if(wejscie ==-1)
- {
- printf("nie ma takiego uzytkownika\n");
- return 0;
- }
- else
- {
- dup2(wejscie,1);
- printf("%s\n",argv[3]);
- close(wejscie);
- }
- return 0;
- }
- if(strcmp(argv[2],"usun")==0)
- {
- strcat(argv[1],".txt");
- int wejscie = open(argv[1],O_RDONLY,0666);
- if(wejscie ==-1)
- {
- printf("nie ma takiego uzytkownika\n");
- return 0;
- }
- int tab[2];
- pipe(tab);
- int a = fork();
- switch(a)
- {
- case 0:
- {
- char znak;
- char nickname[25];
- int i=0;
- while(read(wejscie,&znak,1)==1)
- {
- nickname[i]=znak;
- i++;
- if(znak=='\n')
- {
- nickname[i-1]='\0';
- if(strcmp(nickname,argv[3])!=0)
- {
- dup2(tab[1],1);
- close(tab[0]);
- printf("%s\n",nickname);
- }
- i=0;
- }
- }
- close(wejscie);
- break;
- }
- default:
- {
- wait(NULL);
- close(tab[1]);
- char buffor[30];
- char znak;
- int nowy = open(argv[1],O_WRONLY | O_TRUNC,0666);
- while(read(tab[0],&znak,1)==1)
- {
- printf("%c",znak);
- write(nowy,&znak,1);
- }
- close(nowy);
- }
- }
- return 0;
- }
- if(historia == 0)
- {
- int a = fork();
- if(a>0)
- {
- char buff;
- int wyjscie = open (argv[2],O_RDONLY);
- while(read(wyjscie,&buff,1)==1)
- {
- printf("%c",buff);
- }
- close(wyjscie);
- }
- if(a==0);
- }
- if(kopia == 0)
- {
- int i,j,a[argc];
- for(i=2;i<argc-1;i++)
- {
- mkfifo(argv[i],0666);
- a[i]=fork();
- if(a[i]==0)
- {
- int wejscie = open(argv[i],O_WRONLY);
- dup2(wejscie,1);
- if(i==2)
- {
- printf("Wyslano wiadomosc do:");
- for(j=3;j<argc-1;j++)
- {
- printf(" %s", argv[j]);
- }
- printf("o tresci:'%s'\n",argv[argc-1]);
- }
- else
- printf("Wiadomosc od %s: %s\n",argv[2],argv[argc-1]);
- close(wejscie);
- break;
- }
- }
- return 0;
- }
- if(zwrot == 0)
- {
- int i,j,a[argc],b[argc];
- for(i=3;i<argc-1;i++)
- {
- mkfifo(argv[i],0666);
- a[i]=fork();
- if(a[i]==0)
- {
- b[i] = fork();
- if(b[i]==0)
- {
- int wejscie = open(argv[i],O_WRONLY);
- dup2(wejscie,1);
- printf("Wiadomosc od %s: %s\n",argv[2],argv[argc-1]);
- close(wejscie);
- break;
- }
- if(b[i]>0)
- {
- wait(NULL);
- mkfifo(argv[2],0666);
- int nadawca = open(argv[2],O_WRONLY);
- dup2(nadawca,1);
- printf("%s odczytal wiadomosc.\n",argv[i]);
- close(nadawca);
- break;
- }
- }
- }
- return 0;
- }
- if(all==0)
- {
- char nadaje[25];
- strcpy(nadaje,argv[1]);
- strcat(argv[1],".txt");
- char znak;
- int i = 0;
- int j,k;
- char nickname[25];
- int nadawca = open(argv[1],O_RDONLY);
- if(nadawca==-1)
- {
- printf("nie ma takiego nadawcy, wybierz innego\n");
- return 0;
- }
- else
- {
- while(read(nadawca,&znak,1)==1)
- {
- nickname[i]=znak;
- if(znak=='\n')
- {
- nickname[i]='\0';
- mkfifo(nickname,0666);
- int a=fork();
- i=-1;
- if(a==0)
- {
- int wejscie = open(nickname,O_WRONLY);
- dup2(wejscie,1);
- printf("Wiadomosc od: %s o tresci: %s\n",nadaje,argv[argc-1]);
- close(wejscie);
- break;
- }
- if(a>0);
- }
- i++;
- }
- }
- return 0;
- }
- if(historia!=0 && zwrot!=0 && kopia!=0)
- {
- int i,j,a[argc];
- for(i=2;i<argc-1;i++)
- {
- mkfifo(argv[i],0666);
- a[i]=fork();
- if(a[i]==0)
- {
- int wejscie = open(argv[i],O_WRONLY);
- dup2(wejscie,1);
- printf("Wiadomosc od %s: %s\n",argv[1],argv[argc-1]);
- close(wejscie);
- break;
- }
- }
- return 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement