首页 > 编程知识 正文

shell 函数返回值,shell获取命令返回值

时间:2023-05-05 11:21:11 阅读:38774 作者:2182

读取函数原型:

size_TFread(void*buffer,size_tsize,size_tcount,文件* stream );

size和count的含义:每次读取count个块,每个块为size字节

假设fread返回值的含义是读取的块数,当前返回值为num (size太模糊,认为是读取的字节数)。

判断num值:

1.num==count,读取操作成功,返回count*size字节;

2.num==0。 此时,fread并不一定读错或来到文件的末尾,fread函数的返回值并未判断这两种情况。 上述两种情况只能用函数ferror和feof来判断。 返回值非零以外正常。

num为0的情况下,读取的块数也有可能仅为0,虽然之前说过不一定是文件末尾,但为什么会返回0?

num=fread(buf,1024,1,fp ),请看此示例。 如果文件大小小于1024字节,或者循环读取文件,但最后一个循环中剩下的字节小于1024字节,则此时fread返回0值,buf中没有数据,因此完全无法读取文件,或者

如何解决此问题:

1 .最简单粗暴的方法是将size设为1,fread(buf,1,1024,fp ),一次读一个字节。 怎么做都没错。 这种方法的缺点在于效率低下。 这不是fread函数使用的初衷。 在块上读写是为了提高效率,所以只能在没有办法的时候使用。

2 .在阅读文件之前,首先使用stat函数获取文件的大小。 这样的话,导入到末尾时直接写下具体的尺寸就好了。 大致如下。

filesize=stat(file,

n=filesize/size;

remain=filesize%size;

wile(n ) ) { fread、size、……; n----; }

fread (、remain、……;

这种方法的缺点是stat函数是linux系统函数。 在windows系统上不可用。 暂时找不到替代函数。 在Linux系统上还可以直接使用read函数。 windows正是…… 第一种方法是在没有找到更好的方法之前在windows上使用。 没办法。 )

PS :如果大神们能看到我的拙见,有更好的windows解决方法的话,请一定要告诉我[含泪期待着你的脸]

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。