谁有c语言中int ferror(FILE *stream),返回非零0代表含义列表?

如题所述

哥们,给你参看以下:

函数名: ferror   
功 能: 在调用各种输入输出函数(如 putc.getc.fread.fwrite等)时,如果出现错误,除了函数返回值有所反映外,还可以用ferror函数检查。 它的一般调用形式为 ferror(fp);如果ferror返回值为0(假),表示未出错。如果返回一个非零值,表示出错。应该注意,对同一个文件 每一次调用输入输出函数,均产生一个新的ferror函 数值,因此,应当在调用一个输入输出函数后立即检 查ferror函数的值,否则信息会丢失。在执行fopen函数时,ferror函数的初始值自动置为0。   用 法: int ferror(FILE *stream);   程序例:   #include <stdio.h>   int main(void)   {   FILE *stream;   /* open a file for writing */   stream = fopen("DUMMY.FIL", "w");   /* force an error condition by attempting to read */   (void) getc(stream);   if (ferror(stream)) /* test for an error on the stream */   {   /* display an error message */   printf("Error reading from DUMMY.FIL\n");   /* reset the error and EOF indicators */   clearerr(stream);   }   fclose(stream);   return 0;   }
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-07-12
int ferror ( FILE * stream );
Check error indicator

Checks if the error indicator associated with stream is set, returning a value different from zero if it is.
This indicator is generaly set by a previous operation on the stream that failed.

Parameters
stream
Pointer to a FILE object that identifies the stream.

Return Value
If the error indicator associated with the stream was set, the function returns a nonzero value.
Otherwise, it returns a zero value.

根据库函数的说明,非零的error indicator没有具体的含义,就是用来指示这个FILE tream当前有错误发生,一般是为增强代码强健性加入的检验性程序,避免在文件操作时出现程序锁死或错误。 程序中有些错误的具体错误信息往往很难捕捉和辨别的,而且一般是与编译器和操作系统平台相关的。本回答被提问者采纳
第2个回答  2011-08-24
int __cdecl ferror (FILE *stream)
{
return( ((stream)->_flag & _IOERR) );
}
_IOERR是0x0020,所以ferror的返回值取决于FILE *stream->_flag的值。
而C 语言标准没有确定 FILE 的结构,它只给出了一个 FILE 的轮廓( C 标准只描述了 FILE 的 5 个成员,而且没有给出它们的命名).因此,不同的实现有不同的命名办法.
比如 C++Builder 6 的 FILE 结构为:
typedef struct
{
unsigned char *curp; /* Current active pointer */
unsigned char *buffer; /* Data transfer buffer */
int level; /* fill/empty level of buffer */
int bsize; /* Buffer size */
unsigned short istemp; /* Temporary file indicator */
unsigned short flags; /* File status flags */
wchar_t hold; /* Ungetc char if no buffer */
char fd; /* File descriptor */
unsigned char token; /* Used for validity checking */
} FILE; /* This is the FILE object */
flag表示文件状态,还是很笼统。
不嫌麻烦,你可以用 C++ 流来反馈具体实现的flag标志位是什么样的.
第3个回答  推荐于2018-01-11
返回的常量
系统错误消息
“值”

EPERM 不允许执行该操作 1
ENOENT 没有此文件或目录 2
ESRCH 没有此进程 3
EINTR 函数中断 4
EIO I/O 错误 5
ENXIO 没有此设备或地址 6
E2BIG 参数列表太长 7
ENOEXEC 执行格式错误 8
EBADF 文件编号错误 9
ECHILD 没有生成的进程 10
EAGAIN 没有更多进程、没有足够内存或达到最大嵌套级别 11
ENOMEM 没有足够内存 12
EACCES 权限被拒绝 13
EFAULT 地址错误 14
EBUSY 设备或资源忙碌 16
EEXIST 文件已存在 17
EXDEV 跨设备链接 18
ENODEV 没有此设备 19
ENOTDIR 不是目录 20
EISDIR 是目录 21
EINVAL 参数无效 22
ENFILE 系统中打开的文件太多 23
EMFILE 打开的文件太多 24
ENOTTY 不适当的 I/O 控制操作 25
EFBIG 文件太大 27
ENOSPC 设备上没有剩余空间 28
ESPIPE 搜寻无效 29
EROFS 只读文件系统 30
EMLINK 链接太多 31
EPIPE 管道损坏 32
EDOM 数学参数 33
ERANGE 结果太大 34
EDEADLK 会发生资源死锁 36
EDEADLOCK 与 EDEADLK 相同,以便与早期的 Microsoft C 版本兼容 36
ENAMETOOLONG 文件名太长 38
ENOLCK 无可用锁 39
ENOSYS 函数不受支持 40
ENOTEMPTY 目录不为空 41
EILSEQ 非法字节序列 42
STRUNCATE 字符串被截断 80本回答被网友采纳
第4个回答  2011-08-24
如果ferror返回值为0(假),表示未出错。
如果返回一个非零值,表示出错,好像标准中没有含义列表,正常对于流操作而言,个人猜测是否出错之前完成的字节数?不过没有试验过

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网