fopen小记
来源:互联网 发布:三菱人机界面怎么编程 编辑:程序博客网 时间:2024/05/06 23:11
整理自https://msdn.microsoft.com/zh-cn/library/t3ayayh1(VS.80).aspx
errno, _doserrno, _sys_errlist, and _sys_nerr
这些全局变量包含perror和strerror函数使用的错误代码来打印错误消息。 应该使用下表中列出的更安全的功能版本代替它们的全局变量。
_doserrno
_get_doserrno, _set_doserrno
_errno
_get_errno, _set_errno
These variables are declared in STDLIB.H as
extern int _doserrno; extern int errno; extern char *_sys_errlist[ ];extern int _sys_nerr;
系统级调用中的错误设置了errno。因为errno保留设置它的最后一次调用的值,所以该值可能会被后续调用所改变。始终在可能设置的呼叫之前和之后检查errno。
在错误中,errno不一定设置为与系统调用返回的错误代码相同的值。对于I / O操作,请使用_doserrno访问errno代码的操作系统错误代码。对于大多数非I / O操作,_doserrno的值未定义。
每个错误值都与可以使用perror打印或使用strerror存储在字符串中的错误消息相关联。 perror和strerror使用_sys_errlist数组和_sys_nerr(_sys_errlist中的元素数)来处理错误信息。
图书馆数学例程通过调用_matherr设置errno。为了处理数学错误,请根据_matherr参考描述编写自己的例程,并将其命名为_matherr。
在ERRNO.H中定义为预定义常量的所有errno值均与UNIX兼容,并在下面列出。只有ERANGE,EILSEQ和EDOM在ANSI标准中指定。
EPERM
Operation not permitted
1
ENOENT
No such file or directory
2
ESRCH
No such process
3
EINTR
Interrupted function
4
EIO
I/O error
5
ENXIO
No such device or address
6
E2BIG
Argument list too long
7
ENOEXEC
Exec format error
8
EBADF
Bad file number
9
ECHILD
No spawned processes
10
EAGAIN
No more processes or not enough memory or maximum nesting level reached
11
ENOMEM
Not enough memory
12
EACCES
Permission denied
13
EFAULT
Bad address
14
EBUSY
Device or resource busy
16
EEXIST
File exists
17
EXDEV
Cross-device link
18
ENODEV
No such device
19
ENOTDIR
Not a directory
20
EISDIR
Is a directory
21
EINVAL
Invalid argument
22
ENFILE
Too many files open in system
23
EMFILE
Too many open files
24
ENOTTY
Inappropriate I/O control operation
25
EFBIG
File too large
27
ENOSPC
No space left on device
28
ESPIPE
Invalid seek
29
EROFS
Read-only file system
30
EMLINK
Too many links
31
EPIPE
Broken pipe
32
EDOM
Math argument
33
ERANGE
Result too large
34
EDEADLK
Resource deadlock would occur
36
EDEADLOCK
Same as EDEADLK for compatibility with older Microsoft C versions
36
ENAMETOOLONG
Filename too long
38
ENOLCK
No locks available
39
ENOSYS
Function not supported
40
ENOTEMPTY
Directory not empty
41
EILSEQ
Illegal byte sequence
42
STRUNCATE
String was truncated
80
备注:fopen有一个小坑,当然只对于初学者而言
fopen的方法定义是这样的
FILE*fopen(const char * __restrict __filename, const char * __restrict __mode) __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_2_0, __DARWIN_ALIAS(fopen));
fopen有两个参数,一个是你要操作的文件名_filename,一个是你要做什么操作_mode,mode没有什么好说的,filename这个参数,如果只传你想操作的文件名,而你的文件是本地的,可能会因为路径问题,提示你找不到文件。error = 2(No such file or directory)没有相关路径或者没有这个文件。
这个情况有两种解决方案:
一种是本地利用w的mode自己去创建一个文件,针对这个文件去操作,可以保证这个文件是在你的当前目录下的,不过这种不一定适用,比如我就是要读一个字库的bin文件,然后想将字库文件中的Unicode字库点阵转成utf8,存到数组中,写入文件。
第二种比较简单,你可以尝试一下绝对路径,找到文件的绝对路径,给到参数_filename就OK了,需要注意的是,路径中一般都包含“\”字符,在C/C++语言中有转译字符这一说;
1 #include <iostream> 2 #include <fstream> 3 4 int main () 5 { 6 std::cout << "hello world \n"; 7 8 FILE *fp; 9 char *ch = "";10 char buff[100];11 12 errno_t err = fopen_s(&fp,"c:\\Users\\zhi\\Desktop\\abc.txt","r");13 14 if(err == 0)15 {16 printf("the file open successful!");17 18 ch = fgets(buff,100,fp);19 printf("ch is :%s",ch);20 fclose(fp);21 22 }else{23 printf("err:%d",err);24 printf("the file open not OK!");25 }26 return 0;27 }
先整理这些,都是昨天遇到的问题,虽小却有成长.
- fopen小记
- fopen fwrite fread 问题小记
- fopen
- fopen
- fopen
- fopen
- fopen
- fopen
- fopen
- fopen
- fopen
- fopen
- fopen
- fopen
- fopen
- fopen
- fopen
- fopen
- iOS项目开发中的知识点与问题收集整理
- 校园导航 终结版
- 【Spring框架】<mvc:default-servlet-handler/>与<mvc:resources />的作用
- centos7 安装oracle 11g
- UVC 摄像头驱动(一)硬件描述
- fopen小记
- PF_RING实现分析
- Node.js进行web开发
- sql-365 行转列 模糊搜索关键字
- hadoop2.7.3 datanode无法启动的问题
- Xiangtan Invitation Contest 2017
- java
- 《TCP/IP详解 卷1:协议》 读书笔记 第22章 TCP的坚持定时器
- UVC 摄像头驱动(二)描述符分析