Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.34 KB | None | 0 0
  1. #include <sys/types.h>
  2. #include <sys/stat.h>
  3. #include <errno.h>
  4. #include <unistd.h>
  5. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include <fcntl.h>
  8. #include <sys/wait.h>
  9. #define MAX 10
  10.  
  11.  
  12. void proc_m(char** argv, const char* moje_fifo){
  13.  
  14. char buff[MAX];
  15. int file_deskryptor;
  16. int fifo_deskryptor;
  17. int read_save;
  18.    
  19. if((file_deskryptor = open(argv[1],O_RDONLY,0666)) == -1){
  20.     perror("error");
  21.     exit(1);
  22. }
  23.  
  24. if((fifo_deskryptor = open(moje_fifo,O_WRONLY,0666)) == -1){
  25.     perror("error");
  26.     exit(1);
  27. }
  28.  
  29. while((read_save = read(file_deskryptor,buff,MAX)) > 0){  
  30.  
  31.     if((write(moje_fifo,buff,MAX)) == -1){
  32.         perror("error");
  33.         exit(1);
  34.     }  
  35.  
  36. printf("Czytam plik in:%s\n",buff);
  37. usleep(20000);  
  38.  
  39.  
  40. }
  41. //obsluga błędów
  42. if(close(file_deskryptor) == -1){
  43.     perror("error");
  44.     exit(1);
  45. }
  46.    
  47. if(close(fifo_deskryptor) == -1) {
  48.     perror("error");
  49.     exit(1);
  50. }
  51.    
  52. wait(NULL); //czekanie na potomny
  53. }
  54.  
  55.  
  56.  
  57. void proc_p(char** argv,const char* moje_fifo){
  58.  
  59. char buff[MAX];
  60. int file_deskryptor;
  61. int fifo_deskryptor;
  62. int read_save;
  63.  
  64.    
  65. if((file_deskryptor = open(argv[2],O_CREAT | O_TRUNC | O_WRONLY,0666)) == -1){
  66.     perror("error");
  67.     exit(1);
  68. }  
  69.    
  70. if((fifo_deskryptor =  open(moje_fifo,O_RDONLY,0666)) == -1){
  71.     perror("error");
  72.     exit(1);
  73. }
  74.  
  75. while((read_save = read(fifo_deskryptor,buff,MAX)) > 0){
  76.  
  77.     if(write(file_deskryptor,buff,MAX) == -1)
  78.     {
  79.         perror("error");
  80.         exit(1);
  81.     }
  82.  
  83. printf("Zapisywanie out: %s\n",buff);
  84. usleep(30000);  
  85. }  
  86.  
  87. if(close(file) == -1){
  88.     perror("error");
  89.     exit(1);
  90. }
  91. if(close(fifo)==-1){
  92.     perror("error");
  93.     exit(1);
  94. }
  95.  
  96.  
  97. //odłączenie pliku od programu
  98. if(unlink(moje_fifo) == -1){
  99.     perror("error");
  100.     exit(1);
  101. }
  102.  
  103. }
  104.  
  105.  
  106.  
  107. int main(int argc, char*argv[]){
  108.  
  109.     if(argc!=3){
  110.     printf("Podaj właściwą ilość argumentów\n");
  111.     exit(1);
  112.     }
  113.  
  114. //stały wskaźnik na ścieżkę do pliku
  115. const char *moje_fifo="./moje_fifo";
  116.  
  117.     if(mkfifo(moje_fifo,0666) == -1){ //obsługa błędów, ponieważ mkfifo nie zadziała jeśli już istnieje dany plik
  118.     perror("error");
  119.     exit(1);
  120.     }
  121.  
  122.     switch(fork()){
  123.         case(-1):
  124.         {
  125.         perror("error");
  126.         exit(1);
  127.         break;
  128.         }
  129.     case(0):
  130.         {
  131.          potomny(argv,moje_fifo);
  132.          break;
  133.      }
  134.      default:
  135.      {
  136.          macierzysty(argv,moje_fifo);
  137.          system("md5sum in out");
  138.          break;
  139.      }
  140.    }
  141.  
  142.  
  143.  
  144. return(0);
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement