Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2020
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.95 KB | None | 0 0
  1. //SO IS1 222B LAB07
  2. //Magdalena Bikowska
  3. //bm44273@zut.edu.pl
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <unistd.h>
  7. #include <sys/stat.h>
  8. #include <sys/types.h>
  9. #include <fcntl.h>
  10. #include <dirent.h>
  11. #include <time.h>
  12. #include <string.h>
  13.  
  14. void copy(char *to, const char *from)
  15. {
  16.     while(*to++ = *from++);
  17. }
  18.  
  19. int length(char *s)
  20. {
  21.     int i = 0;
  22.     while(*s != '\0')
  23.     {
  24.         i++;
  25.         s++;
  26.     }
  27.  
  28.     return i;
  29. }
  30.  
  31. void cut(char *s, int n)
  32. {
  33.     for(int i = 0; i < n; i++, *s++);
  34.     *s = '\0';
  35. }
  36.  
  37. char int_to_char(int n)
  38. {
  39.     char result;
  40.     while(n != 0)
  41.         result += n;
  42.     n + 48;
  43.     return result;
  44.  
  45. }
  46.  
  47. struct log {
  48.     struct tm date; // czas
  49.     char argument[10]; // napisz argumentu wywołania
  50. };
  51.  
  52. int check_name(const char *name)
  53. {
  54.     if(name[4]!='.' && name[6]!='.' && name[9]!='.' && name[12]!='.' && name[15]!='.' ) return 0;
  55.     return 1;
  56. }
  57. char *plik="0000.0.00.00.00.txt";
  58.  
  59. void list_dir(const char *path) {
  60.     struct dirent *entry;
  61.     DIR *dir = opendir(path);
  62.    
  63.     if (dir == NULL) {
  64.         return;
  65.     }
  66.     int i = 0;
  67.  
  68.     //char *plik="0000.0.00.00.00.txt";
  69.     while ((entry = readdir(dir)) != NULL) {
  70.         if (entry->d_type == DT_REG){
  71.             if(check_name(entry->d_name))
  72.             {
  73.                 if(strcmp(plik,entry->d_name)<0)
  74.                 {
  75.                     printf("%s\n",entry->d_name);
  76.                     plik = entry->d_name;
  77.                 }
  78.             i++;
  79.             }
  80.         }
  81.     }
  82.  
  83.     closedir(dir);
  84.  
  85.     return;
  86. }
  87.  
  88. int main(int argc, char *argv[]){
  89.  
  90.     if(argc == 1)
  91.         exit(1);
  92.  
  93.     int opt;
  94.     struct log obiekcik;
  95.  
  96.     time_t ptr;
  97.     time(&ptr);
  98.     char* rezultat;
  99.  
  100.     int handle;
  101.     int ile;
  102.     int wsk = 0;
  103.     int len;
  104.     //char * plik;
  105.     FILE *file;
  106.     char c[1000];
  107.     char test[50];
  108.  
  109.  
  110.     while((opt = getopt(argc, argv, "rw:")) != -1)  
  111.     {  
  112.         switch(opt)  
  113.         {  
  114.             case 'w':
  115.  
  116.                 localtime_r(&ptr, &obiekcik.date);
  117.                 printf("%d\n", obiekcik.date.tm_mon + 1);
  118.  
  119.                 len = length(argv[2]);
  120.                 if(len < 9)
  121.                     cut(argv[2], len);
  122.                 else
  123.                 {
  124.                     cut(argv[2], 9);
  125.                     len = 9;
  126.                 }
  127.  
  128.                 copy(obiekcik.argument, argv[2]);
  129.                 printf("%s\n", obiekcik.argument);
  130.                 char name[20];
  131.                 char a[5];
  132.  
  133.                 //sprintf(obiekcik.date.tm_year + 1900, a, 10);
  134.                 //copy(name, a);
  135.                 //int_to_char(obiekcik.date.tm_year + 1900, a);
  136.                 ile = obiekcik.date.tm_year + 1900;
  137.                 wsk++;
  138.                 while ( ile / 10 > 0)
  139.                 {
  140.                     wsk++;
  141.                     ile = ile/10;
  142.  
  143.                 }
  144.                 sprintf(a, "%d", obiekcik.date.tm_year + 1900);
  145.                 copy(name, a);
  146.                 copy(&name[wsk], ".");
  147.  
  148.  
  149.                
  150.                 sprintf(a, "%d", obiekcik.date.tm_mon + 1);
  151.                 //printf("to a %s\n", a);
  152.                 copy(&name[++wsk], a);
  153.                 ile = obiekcik.date.tm_mon + 1;
  154.                 wsk++;
  155.                 while ( ile / 10 > 0)
  156.                 {
  157.                     wsk++;
  158.                     ile = ile/10;
  159.                 }
  160.                 copy(&name[wsk], ".");
  161.  
  162.  
  163.  
  164.                 sprintf(a, "%d", obiekcik.date.tm_mday);
  165.                 //printf("to a %s\n", a);
  166.                 copy(&name[++wsk], a);
  167.                 ile = obiekcik.date.tm_mday;
  168.                 wsk++;
  169.                 while ( ile / 10 > 0)
  170.                 {
  171.                     wsk++;
  172.                     ile = ile/10;
  173.                 }
  174.                 copy(&name[wsk], ".");
  175.  
  176.  
  177.  
  178.                 sprintf(a, "%d", obiekcik.date.tm_hour);
  179.                 //printf("to a %s\n", a);
  180.                 copy(&name[++wsk], a);
  181.                 ile = obiekcik.date.tm_hour;
  182.                 wsk++;
  183.                 while ( ile / 10 > 0)
  184.                 {
  185.                     wsk++;
  186.                     ile = ile/10;
  187.                 }
  188.                 copy(&name[wsk], ".");
  189.  
  190.  
  191.                 sprintf(a, "%d", obiekcik.date.tm_min);
  192.                 //printf("to a %s\n", a);
  193.                 copy(&name[++wsk], a);
  194.                 ile = obiekcik.date.tm_min;
  195.                 wsk++;
  196.                 while ( ile / 10 > 0)
  197.                 {
  198.                     wsk++;
  199.                     ile = ile/10;
  200.                 }
  201.                 copy(&name[wsk], ".");
  202.  
  203.                 copy(&name[++wsk], "txt");
  204.  
  205.  
  206.                 /*copy(name[5], itoa(obiekcik.date.tm_mon + 1));
  207.                 copy(name[7], ".");
  208.                 copy(name[, itoa(obiekcik.date.tm_mday));
  209.                 copy(name[, ".");
  210.                 copy(name, itoa(obiekcik.date.tm_hour));
  211.                 copy(name, ".");
  212.                 copy(name, itoa(obiekcik.date.tm_min));
  213.                 copy(name, ".");
  214.                 copy(name, "log");*/
  215.  
  216.                 //printf("%s\n", name);
  217.  
  218.                 handle = open(name, O_RDWR | O_CREAT, S_IRWXU);
  219.                 if(handle >= 0)
  220.                 {
  221.                     //read(0, &input, 1);
  222.                     lseek(handle, 0, SEEK_END);
  223.                     write(handle, &obiekcik.argument, length(obiekcik.argument));
  224.                     write(handle, "\n", sizeof(char));
  225.                     write(handle, &name, length(name) - 4);
  226.                     //write(handle, &obiekcik.date, sizeof(obiekcik.date));
  227.                     write(handle, "\n", sizeof(char));
  228.                 }
  229.                 close(handle);
  230.  
  231.                 /*handle = open("msg.txt", O_RDWR | O_CREAT, S_IRWXU);
  232.                 if(handle >= 0)
  233.                 {
  234.                     read(0, &input, 1);
  235.                     write(handle, &input, sizeof(input));
  236.                 }
  237.                 close(handle);*/
  238.  
  239.  
  240.                 break;
  241.             case 'r':
  242.                
  243.                  list_dir(".");
  244.  
  245.                
  246.                 strcat(test,"./");
  247.                 strcat(test,plik);
  248.                 printf("%s\n", test);
  249.                 if ((file = fopen(test, "r") )== NULL)
  250.                     printf("Error! opening file");
  251.  
  252.                 fscanf(file, "%[^\n]", c);
  253.                 printf("%s\n", c);
  254.                 //fclose(fptr);
  255.                 //for(int i = 0; i<SIZE;i++)
  256.                 //    printf("%s\n", lista[i]);
  257.  
  258.                 /*struct dirent *dir;
  259.                 DIR *d = opendir(".");
  260.                 if (d)
  261.                 {
  262.                     while ((dir = readdir(d)) != NULL)
  263.                     {
  264.                         printf("%s\n", dir->d_name);
  265.                     }
  266.                 closedir(d);
  267.                 }*/
  268.  
  269.  
  270.  
  271.  
  272.  
  273.  
  274.  
  275.  
  276.  
  277.            
  278.                 break;
  279.             default:
  280.                 break;
  281.  
  282.            
  283.         }  
  284.     }  
  285.  
  286.    
  287.     return 0;
  288. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement