C   39
article open
Guest on 20th September 2023 12:20:52 AM


  1. #include<sys/types.h>  
  2. #include<sys/stat.h>
  3. #include<fcntl.h>
  4. #include<unistd.h>
  5. #include<stdio.h>
  6. #include<string.h>
  7. #include<stdlib.h>
  8.  
  9. char doll_msg[70000];
  10. char doll_len;
  11.  
  12.  
  13. int article_open(char *pathname)
  14. {
  15.         return open(pathname,O_WRONLY);
  16. }
  17.  
  18. ssize_t push_single_line(int fd, char *message)
  19. {
  20.         int i;
  21.         struct flock f_tmp;
  22.         f_tmp.l_type = F_WRLCK;
  23.         f_tmp.l_start = 0;
  24.         f_tmp.l_whence = SEEK_SET;
  25.         f_tmp.l_len = 0;
  26.        
  27.         /*type start whence len*/
  28.  
  29.         for(i=0;message[i]!='\0' && message[i]!='\n';i++);
  30.         message[i++]='\n';
  31.  
  32.  
  33.         if(fcntl(fd,F_SETLKW,&f_tmp)<0)
  34.                 return -1;
  35.  
  36.         f_tmp.l_type= F_UNLCK;
  37.         if(lseek(fd,0,SEEK_END)<0 && (fcntl(fd,F_SETLK,&f_tmp)||1) )
  38.                 return -1;
  39.  
  40.         if(write(fd,message,i)<0 && (fcntl(fd,F_SETLK,&f_tmp)||1) )
  41.                 return -1;     
  42.  
  43.          fcntl(fd,F_SETLK,&f_tmp);
  44.          return i;
  45. }
  46.  
  47. ssize_t collect_messages(char *message)
  48. {
  49.         int i;
  50.         for(i=0;message[i]!='\0' && message[i]!='\n';i++);
  51.         message[i]='\0';
  52.         if(doll_len+i>65536)
  53.                 return -1;
  54.  
  55.         strcpy(doll_msg+doll_len,message);
  56.         doll_len+=i;
  57.         doll_msg[doll_len++]='\n';
  58.         doll_msg[doll_len]='\0';
  59.        
  60.         return doll_len;
  61. }
  62.  
  63. ssize_t push_doll(int fd)
  64. {
  65.         struct flock f_tmp;
  66.         /*type start whence len*/
  67.  
  68.         f_tmp.l_type = F_WRLCK;
  69.         f_tmp.l_start = 0;
  70.         f_tmp.l_whence = SEEK_SET;
  71.         f_tmp.l_len = 0;
  72.         if(fcntl(fd,F_SETLKW,&f_tmp)<0)
  73.                 return -1;
  74.  
  75.         f_tmp.l_type= F_UNLCK;
  76.         if(lseek(fd,0,SEEK_END)<0 && (fcntl(fd,F_SETLK,&f_tmp)||1) )
  77.                 return -1;
  78.  
  79.         if(write(fd,doll_msg,doll_len)<0 && (fcntl(fd,F_SETLK,&f_tmp)||1) )
  80.                 return -1;     
  81.  
  82.         fcntl(fd,F_SETLK,&f_tmp);
  83.  
  84.         int len=doll_len;
  85.         doll_len=0;
  86.         return len;
  87. }

Raw Paste

Login or Register to edit or fork this paste. It's free.