Advertisement
Guest User

Untitled

a guest
Feb 28th, 2017
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.99 KB | None | 0 0
  1.  #include <sys/types.h>
  2.   #include <fcntl.h>
  3.   #include <unistd.h>
  4.   #include <stdlib.h>
  5.   #include <stdio.h>
  6.   #include <string.h>
  7.  
  8. int main(int argc, char *argv[])
  9.   {
  10.       //Константам следует давать имена, и лучше всего выносить из функции.
  11.       long displ[101];
  12.       //Давайте внятные имена переменным. Не заставляйте догадываться что такое i,j,c
  13.       int file, i = 1, j = 0, line_no, line_ln[101];
  14.       char c, buf[257];
  15.  
  16.       if(( file =  open(argv[1], O_RDONLY)) == -1) {
  17.           perror(argv[1]);
  18.           exit(EXIT_FAILURE);
  19.           }
  20.  
  21.       displ[1] = 0L;
  22.       //Хорошая практика тело цикла заключать в {}
  23.       while(read(file, &c, 1))       
  24.           if( c == '\n' ) {
  25.               j++;
  26.               line_ln[i++] = j;
  27.               //Как работает lseek? За что отвечают параметры?
  28.               //lseek не может возвращать ошибок?
  29.               displ[i] = lseek(file, 0L, SEEK_CUR);
  30.               j = 0;
  31.           }
  32.           else
  33.               j++;
  34.  
  35.       while( printf("Line number : ") && scanf("%d", &line_no)) {
  36.           //Хорошая практика содержание ветвления if\else заключать в {}, даже если используется единственный оператор.
  37.           if(line_no <= 0)
  38.               exit(EXIT_SUCCESS);
  39.          
  40.           //lseek не может возвращать ошибок?
  41.           lseek(file, displ[line_no], SEEK_SET);
  42.          
  43.           //Что если длина строки больше, чем размер buf?
  44.           if(read(file, buf, line_ln[line_no]))
  45.               printf("%s", buf);
  46.           else
  47.               fprintf(stderr, "Bad Line Number\n");
  48.          
  49.           //memset не может возвращать ошибок?
  50.           memset(buf, 0, sizeof(buf));
  51.           }
  52.       return EXIT_SUCCESS;  
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement