Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sys/types.h>
- #include <fcntl.h>
- #include <unistd.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- int main(int argc, char *argv[])
- {
- //Константам следует давать имена, и лучше всего выносить из функции.
- long displ[101];
- //Давайте внятные имена переменным. Не заставляйте догадываться что такое i,j,c
- int file, i = 1, j = 0, line_no, line_ln[101];
- char c, buf[257];
- if(( file = open(argv[1], O_RDONLY)) == -1) {
- perror(argv[1]);
- exit(EXIT_FAILURE);
- }
- displ[1] = 0L;
- //Хорошая практика тело цикла заключать в {}
- while(read(file, &c, 1))
- if( c == '\n' ) {
- j++;
- line_ln[i++] = j;
- //Как работает lseek? За что отвечают параметры?
- //lseek не может возвращать ошибок?
- displ[i] = lseek(file, 0L, SEEK_CUR);
- j = 0;
- }
- else
- j++;
- while( printf("Line number : ") && scanf("%d", &line_no)) {
- //Хорошая практика содержание ветвления if\else заключать в {}, даже если используется единственный оператор.
- if(line_no <= 0)
- exit(EXIT_SUCCESS);
- //lseek не может возвращать ошибок?
- lseek(file, displ[line_no], SEEK_SET);
- //Что если длина строки больше, чем размер buf?
- if(read(file, buf, line_ln[line_no]))
- printf("%s", buf);
- else
- fprintf(stderr, "Bad Line Number\n");
- //memset не может возвращать ошибок?
- memset(buf, 0, sizeof(buf));
- }
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement