使用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); } 

通过字节读取字节并检查每个字节是否为'\n'如果不是,则将其存储到buffer
如果是'\n''\0' '\n'添加到缓冲区然后使用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; }