理解C中的read()操作?

理解C中的read()操作?,c,file,C,File,我有以下代码: int fd = open(filename, O_RDONLY); char buf[len]; size_t count =0; while (count < len){ size_t_nbytes = read (fd, buf+len, len-count); if(nbytes==0){ len=count; break; } count +=nbytes; } int fd=open(仅文件名

我有以下代码:

int fd = open(filename, O_RDONLY);
char buf[len];
size_t count =0;
while (count < len){
    size_t_nbytes = read (fd, buf+len, len-count);
    if(nbytes==0){
        len=count;
         break;
     }
    count +=nbytes;
}
int fd=open(仅文件名);
char-buf[len];
大小\u t计数=0;
while(计数
我不理解的部分是read()函数中的len计数。len count是我要读取的块的大小。在第一个循环中是len。所有我想读的东西。我可以用len替换它吗?无论如何,循环应该只循环一次?谢谢您的帮助。

虽然它“可能”应该循环一次,但不要打赌,最好直接处理它:

int fd = open(filename, O_RDONLY);
char buf[len];
size_t count =0;
while (count < len){
    size_t_nbytes = read (fd, buf+count, len-count);
                               //  ^^  use count instead of len
    if(nbytes==0){
         break;
     } else if (nbytes == -1) {
         perror("read");
         break;
     }
    count +=nbytes;
}
如果碰巧读取了50个字节,则下一轮为

  read (fd, buf+50, 100-50);

这正是您想要的。

因此,即使文件比len长,并且我想读取一个大小为len的块,也不能保证read将实际读取所有len字节,但可能只有size\u t\n字节 read (fd, buf+50, 100-50);