read()返回“不正确”的值

时间:2014-03-06 14:21:46

标签: c linux

while(  rd = read(fd1, buf, 512) != 0)
{
    len += rd;
    if(readed < 0) 
    perror("read: ");
}

MAN页面说,read()返回读取字节数,但在我的情况下,此代码返回块数(取决于第三个参数)或迭代次数。例如,我有36个符号的文件,当所有符号通常读取时,此代码返回1,如果我将512更改为4,则返回9,依此类推。请更正我和此代码以返回使用512个大小的块读取的字节数

3 个答案:

答案 0 :(得分:9)

rd = read(fd1, buf, 512) != 0

装置

rd = (read(fd1, buf, 512) != 0)

!=的结果始终为01

你可能意味着

while ((rd = read(fd1, buf, 512)) != 0)

答案 1 :(得分:1)

不正确使用括号, PL。像下面一样更改你的代码。希望它会给你正确的结果。

while(  (rd = read(fd1, buf, 512)) != 0)
{
    len += rd;
    if(rd < 0) 
    perror("read: ");
}

答案 2 :(得分:1)

您是否尝试将此值设置为while循环条件之外? 如果没有更多括号,我认为在while条件下设置和测试值部分是不正确的。