我正在实现自定义FTP应用程序,并且在从服务器向客户端读取/保存文件时遇到一些麻烦。我的实现如下:
fp = open(filename, O_RDWR|O_CREAT, 0666);
int bytes_written, bytes_read;
while(1) {
bzero((char *)&buf, sizeof(buf));
bytes_read = read(s, buf, sizeof(buf)); // s is correctly configured socket of server implementation
if(bytes_read==0) // where i thought reading is finished
break;
if(bytes_read<0)
// error checking, exit(1)
void *p = buf;
while(bytes_read > 0) {
bytes_written = write(fp, p, bytes_read);
if(bytes_written<=0)
// error checking, exit(1)
bytes_read -= bytes_written;
p += bytes_written;
}
}
我的理解是,一旦没有更多数据要读取,bytes_read将为0,我将从循环中断开。但是,在我的测试中读取和写入正确数量的字节后,程序在再次调用read后停止。我无法在该点之后打印bytes_read,并且执行不会继续执行bytes_read if语句。我是否以某种方式滥用控制流逻辑?