设为首页 加入收藏

TOP

11.5.2 fread_s
2013-10-07 00:46:09 来源: 作者: 【 】 浏览:289
Tags:11.5.2 fread_s

11.5.2  fread_s

在了解了缓冲的大致内容之后,让我们回到fread的代码分析。MSVC的fread的定义在crt/fread.c里,实际内容只有一行:

size_t _fread_nolock(
void *buffer,
size_t elementSize,
size_t count,
FILE *stream
)
{
return fread_s(buffer, SIZE_MAX, elementSize
, count, stream);
}
可见fread将所有的工作都转交给了_fread_ s。fread_s定义如下:
fread -> fread_s:
size_t __cdecl fread_s(
void *buffer,
size_t bufferSize,
size_t elementSize,
size_t count,
FILE *stream
)
{
……
_lock_str(stream);
    retval = _fread_nolock_s(
buffer
, bufferSize
, elementSize
, count
, stream);
    _unlock_str(stream);
return retval;
}
fread_s的参数比fread多一个bufferSize,这个参数用于指定参数buffer的大小。在fread中,这个参数直接被定义为SIZE_MAX,即size_t的最大值,表明fread不关心这个参数。而用户在使用fread_s时就可以指定这个参数,以达到防止越界的目的(fread_s的s是safe的意思)。fread_s首先对各个参数检查,然后使用_lock_str对文件进行加锁,以防止多个线程同时读取文件而导致缓冲区不一致。我们可以看到fread_s其实又把工作交给了_fread_nolock_s。
【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇11.5.3 fread_nolock_s(1) 下一篇11.5.5 文本换行

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: