本文整理汇总了C++中FILE::read方法的典型用法代码示例。如果您正苦于以下问题:C++ FILE::read方法的具体用法?C++ FILE::read怎么用?C++ FILE::read使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FILE
的用法示例。
在下文中一共展示了FILE::read方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: read
int read(int fid, void *buf, unsigned int nbytes)
{
int hchar = 0, read = 0;
FILE *file;
/*-------------------------------------------------------------------*/
/* If number of requested bytes is zero, return zero. */
/*-------------------------------------------------------------------*/
if (nbytes == 0)
return 0;
#if OS_PARM_CHECK
/*-------------------------------------------------------------------*/
/* Ensure file descriptor is valid. */
/*-------------------------------------------------------------------*/
if (fid < 0 || fid >= FOPEN_MAX)
{
set_errno(EBADF);
return -1;
}
/*-------------------------------------------------------------------*/
/* Return error if buffer pointer is invalid. */
/*-------------------------------------------------------------------*/
if (buf == NULL)
{
Files[fid].errcode = EFAULT;
set_errno(EFAULT);
return -1;
}
#endif
/*-------------------------------------------------------------------*/
/* Acquire exclusive read access to file. */
/*-------------------------------------------------------------------*/
file = &Files[fid];
file->acquire(file, F_READ);
/*-------------------------------------------------------------------*/
/* Return error if file is closed. */
/*-------------------------------------------------------------------*/
if (file->ioctl == NULL)
{
set_errno(EBADF);
file->release(file, F_READ);
return -1;
}
/*-------------------------------------------------------------------*/
/* If available, read pushed-back character first. */
/*-------------------------------------------------------------------*/
if (file->hold_char)
{
ui8 *cp = buf;
*cp = (ui8)file->hold_char;
buf = cp + 1;
file->hold_char = 0;
hchar = 1;
--nbytes;
}
/*-------------------------------------------------------------------*/
/* Check if there are more characters to read. */
/*-------------------------------------------------------------------*/
if (nbytes)
{
/*-----------------------------------------------------------------*/
/* Pass read request to file system or device driver. */
/*-----------------------------------------------------------------*/
read = file->read(file, buf, nbytes);
/*-----------------------------------------------------------------*/
/* Read error is disregarded iff pushed-back character was read. */
/*-----------------------------------------------------------------*/
if (read == -1)
{
if (hchar)
read = 0;
else
file->errcode = get_errno();
}
}
/*-------------------------------------------------------------------*/
/* Release exclusive read access to file. */
/*-------------------------------------------------------------------*/
file->release(file, F_READ);
/*-------------------------------------------------------------------*/
/* Return number of bytes successfully read or -1. */
/*-------------------------------------------------------------------*/
return read + hchar;
}