- #include <stdio.h>
- #include <fcntl.h>
- #include <unistd.h>
- #include <string.h>
- #include <stdlib.h>
- int main(int argc, char *argv[])
- {
- 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 rura[2];
- pipe(rura);
- int a=fork();
- if(a>0)
- {
- char tab[25];
- int i=0;
- char c;
- while(read(wejscie,&c,1)==1){
- tab[i]=c;
- i++;
- if(c=='\n')
- {
- tab[i-1]='\0';
- //printf("%s \n",tab);
- i=0;
- if(strcmp(tab,argv[3])!=0)
- {dup2(rura[1],1);
- close(rura[0]);
- printf("%s\n",tab);
- //write(rura[1],"zenek",5);
- }
- }
- }
- close(wejscie);
- }
- if(a==0)
- {
- int wyjscie=open(argv[1],O_WRONLY | O_TRUNC,0666);
- char c;
- close(rura[1]);
- //char buf[100];
- //read(rura[0],buf,5);
- while(read(rura[0],&c,1)==1){
- write(wyjscie,&c,1);
- }
- close(wyjscie);
- //printf("%s\n",buf);
- }
- return 0;
- }
- if(strcmp(argv[1],"history")==0)
- {
- char bufforek;
- int wyjscie = open(argv[2],O_RDONLY);
- while(read(wyjscie,&bufforek,1)==1)
- {
- printf("%c",bufforek);
- }
- close(wyjscie);
- return 0;
- }
- if(strcmp(argv[2],"wszyscy")==0)
- {
- int i=0,k=0;
- char c;
- char imiona[30][100];
- char tab[25];
- strcat(argv[1],".txt");
- int kontakt=open(argv[1],O_RDONLY,0666);
- if(kontakt==-1) {printf("Nie ma takiego uzytkownia"); return 0;}
- while(read(kontakt,&c,1)==1)
- {
- tab[i]=c;
- i++;
- if(c=='\n')
- {
- tab[i-1]='\0';
- i=0;
- strcpy(imiona[k],tab);
- k++;
- }
- }
- close(kontakt);
- int a[k];
- for(i=0;i<k;i++)
- {
- mkfifo(imiona[i],0666);
- a[i]=fork();
- if(a[i]==0)
- {
- int wejscie = open(imiona[i],O_WRONLY);
- dup2(wejscie,1);
- printf("\n Wiadomosc od: %s \n%s\n",argv[1],argv[argc-1]);
- close(wejscie);
- break;
- }
- }
- return 0;
- }
- if(strcmp(argv[1],"-zwrot")==0)
- { int i;
- int rodz[argc];
- int pot[argc];
- for(i=3;i<argc-1;i++)
- {
- mkfifo(argv[i],0666);
- rodz[i]=fork();
- if(rodz[i]==0)
- {
- pot[i] = fork();
- if(pot[i]==0)
- {
- int wejscie = open(argv[i],O_WRONLY);
- dup2(wejscie,1);
- printf("\n Wiadomosc od: %s \n%s\n",argv[2],argv[argc-1]);
- close(wejscie);
- break;
- }
- if(pot[i]>0)
- {
- wait(NULL);
- mkfifo(argv[2],0666);
- int zwrot = open(argv[2],O_WRONLY);
- dup2(zwrot,1);
- printf("Wiadomosc zostala odczytana przez %s\n",argv[i]);
- close(zwrot);
- break;
- }
- }
- }
- return 0;
- }
- else
- {
- int i;
- int a[argc];
- int b[argc];
- int rozmiar = strlen(argv[argc-1]);
- 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(strcmp(argv[1],"-kopia")==0)
- {
- if(i==2) printf("\n Kopia wyslanej wiadomosci: %s \n",argv[argc-1]);
- else printf("\n Wiadomosc od: %s \n%s\n",argv[2],argv[argc-1]);
- }
- else printf("\n Wiadomosc od: %s \n%s\n",argv[1],argv[argc-1]);
- close(wejscie);
- break;
- }
- }
- return 0;
- }
- return 0;
- }