Чтение из файла с помощью функции read ()

Я должен написать программу, которая читает числа в отдельных строках каждый. Можно ли читать только одну строку файла, а затем читать int из буфера и так далее до конца файла? Очень трудно найти хорошие примеры использования чтения и записи. Мой пример работает, но я бы хотел прочитать, пока он не обнаружит символ '\n' а затем преобразует буфер в int.

 #include  #include  #include  #include  #include  int fd[2]; void readFile(int fd) { unsigned char buffer[10]; int bytes_read; int k=0; do { bytes_read = read(fd, buffer, 10); k++; for(int i=0; i<10; i++) { printf("%c", buffer[i]); } } while (bytes_read != 0); } int tab[50]; int main(int argc, char *argv[]) { if(argv[1] == NULL || argv[2] == NULL) { printf("Function requires two arguments!\nGood bye...\n"); return -1; } else { if (access(argv[1], F_OK) == 0) { fd[0] = open(argv[1], O_RDONLY); } else { fd[0] = open(argv[1], O_WRONLY|O_CREAT|O_SYNC, 0700); const int size = 50; for(int i=0; i<size; i++) { char buf[10]; sprintf(buf, "%d\n", i+1); write(fd[0], buf, strlen(buf)); } close(fd[0]); fd[0] = open(argv[1], O_RDONLY); if (access(argv[2], F_OK) == 0) fd[1] = open(argv[2], O_WRONLY); else fd[1] = open(argv[2], O_WRONLY|O_CREAT, 0700); } } if (access(argv[2], F_OK) == 0) fd[1] = open(argv[2], O_WRONLY); else fd[1] = open(argv[2], O_WRONLY|O_CREAT, 0700); readFile(fd[0]); close(fd[0]); close(fd[1]); } 

Пересмотренный код:

 void readFile(int fd) { char buffer[10]; int bytes_read; int k = 0; do { char t = 0; bytes_read = read(fd, &t, 1); buffer[k++] = t; printf("%c", t); if(t == '\n' && t == '\0') { printf("%d", atoi(buffer)); for(int i=0; i<10; i++) buffer[i]='\0'; k = 0; } } while (bytes_read != 0); } 

Прочитайте Byte by Byte и убедитесь, что каждый байт напротив '\n' если он отсутствует, затем сохраните его в buffer
если это '\n' добавить '\0' для буфера, а затем использовать atoi()

Вы можете прочитать один байт, как это

 char c; read(fd,&c,1); 

См. read()

fgets будет работать для вас. вот очень хорошая документация по этому поводу: –
http://www.cplusplus.com/reference/cstdio/fgets/

Если вы не хотите использовать fgets, следующий метод будет работать для вас: –

 int readline(FILE *f, char *buffer, size_t len) { char c; int i; memset(buffer, 0, len); for (i = 0; i < len; i++) { int c = fgetc(f); if (!feof(f)) { if (c == '\r') buffer[i] = 0; else if (c == '\n') { buffer[i] = 0; return i+1; } else buffer[i] = c; } else { //fprintf(stderr, "read_line(): recv returned %d\n", c); return -1; } } return -1; }