fopen的使用小记
整理自https://msdn.microsoft.com/zh-cn/library/t3ayayh1(VS.80).aspx
errno, _doserrno, _sys_errlist, and _sys_nerr
这些全局变量包含perror和strerror函数使用的错误代码来打印错误消息。 应该使用下表中列出的更安全的功能版本代替它们的全局变量。
| Global Variable | Functional Equivalents |
|---|---|
|
_doserrno |
|
|
_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标准中指定。
| Constant | System error message | Value |
|---|---|---|
|
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++语言中有转译字符这一说;
|
转义字符
|
意义
|
ASCII码值(十进制)
|
|
\a
|
响铃(BEL)
|
007
|
|
\b
|
退格(BS) ,将当前位置移到前一列
|
008
|
|
\f
|
换页(FF),将当前位置移到下页开头
|
012
|
|
\n
|
换行(LF) ,将当前位置移到下一行开头
|
010
|
|
\r
|
回车(CR) ,将当前位置移到本行开头
|
013
|
|
\t
|
水平制表(HT) (跳到下一个TAB位置)
|
009
|
|
\v
|
垂直制表(VT)
|
011
|
|
\\
|
代表一个反斜线字符''\'
|
092
|
|
\'
|
代表一个单引号(撇号)字符
|
039
|
|
\"
|
代表一个双引号字符
|
034
|
| \? |
代表一个问号 |
063 |
|
\0
|
空字符(NULL)
|
000
|
|
\ooo
|
1到3位八进制数所代表的任意字符
|
三位八进制
|
|
\xhh
|
1到2位十六进制所代表的任意字符
|
二位十六进制
|
#include <iostream>
#include <fstream> int main ()
{
std::cout << "hello world \n"; FILE *fp;
char *ch = "";
char buff[]; errno_t err = fopen_s(&fp,"c:\\Users\\zhi\\Desktop\\abc.txt","r"); if(err == )
{
printf("the file open successful!"); ch = fgets(buff,,fp);
printf("ch is :%s",ch);
fclose(fp); }else{
printf("err:%d",err);
printf("the file open not OK!");
}
return ;
}
先整理这些,都是昨天遇到的问题,虽小却有成长.
fopen的使用小记的更多相关文章
- atop 分析小记
atop分析小记 atop这个工具相当NB 项目中需要用到它的磁盘使用率统计值,为了一探究竟,挖了下它的代码 atopsar atopsar实际就是atop的一个链接指向. 从atop.c的main源 ...
- [原]Paste.deploy 与 WSGI, keystone 小记
Paste.deploy 与 WSGI, keystone 小记 名词解释: Paste.deploy 是一个WSGI工具包,用于更方便的管理WSGI应用, 可以通过配置文件,将WSGI应用加载起来. ...
- FILE文件流的中fopen、fread、fseek、fclose的使用
FILE文件流用于对文件的快速操作,主要的操作函数有fopen.fseek.fread.fclose,在对文件结构比较清楚时使用这几个函数会比较快捷的得到文件中具体位置的数据,提取对我们有用的信息,满 ...
- fopen函数和fread函数、fwrite函数
fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const ...
- C语言的fopen函数(文件操作/读写)
头文件:#include <stdio.h> fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为: FILE * fopen(const char * path, c ...
- MySql 小记
MySql 简单 小记 以备查看 1.sql概述 1.什么是sql? 2.sql发展过程? 3.sql标准与方言的关系? 4.常用数据库? 5.MySql数据库安装? 2.关键概念 表结构----- ...
- Git小记
Git简~介 Git是一个分布式版本控制系统,其他的版本控制系统我只用过SVN,但用的时间不长.大家都知道,分布式的好处多多,而且分布式已经包含了集中式的几乎所有功能.Linus创造Git的传奇经历就 ...
- 广州PostgreSQL用户会技术交流会小记 2015-9-19
广州PostgreSQL用户会技术交流会小记 2015-9-19 今天去了广州PostgreSQL用户会组织的技术交流会 分别有两个session 第一个讲师介绍了他公司使用PostgreSQL-X2 ...
- 东哥读书小记 之 《MacTalk人生元编程》
一直以来的自我感觉:自己是个记性偏弱的人.反正从小读书就喜欢做笔记(可自己的字写得巨丑无比,尼玛不科学呀),抄书这事儿真的就常发生俺的身上. 因为那时经常要背诵课文之类,反正为了怕自己忘记, ...
随机推荐
- 消息映射(C++)(转)
摘要:控件通知消息有很多种,但是有一种是很常用,但是又不是很容易掌握的,那就是WM_NOTIFY,我试着对此做一下比较全面的论述,有不对的地方,还希望各路大虾批评指正. 控件通知消息 ...
- js,jq获取元素位置属性及兼容性写法
网页被卷起来的高度/宽度 document.documentElement.scrolltop //火狐 和 其他浏览器 document.body.scrolltop //ie,谷歌浏览器和没有 ...
- webpack2.x基础属性讲解(一)
webpack作为构建工具平时作为前端作为优化.模块编程.和分片打包的重要组成部分,大家可能并不陌生,如果没有时刻的去关注文档,那么大家可能不太清楚webpack已经默默然的升级到2.x了,对比1 ...
- android 学习笔记(1)
内容来源:高成珍.钟元生<Android编程经典案例>学习笔记 表格布局——TableLayout 表格布局以行和列的方式来管理界面的布局,但并不能明确声明包含几行几列.可通过TableR ...
- python 语句:条件、循环、break、continue...
1. 条件语句 执行条件:判断条件"成立时(非零),则执行后面的语句,而执行内容可以多行,以缩进来区分表示同一范围. [Python程序语言指定任何非0和非空(null)值为true,0 或 ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(五)结合MockMvc进行服务端的单元测试
日常啰嗦 承接前一篇文章<Spring+SpringMVC+MyBatis+easyUI整合优化篇(四)单元测试实例>,已经讲解了dao层和service层的单元测试,还有控制器这层也不能 ...
- 重新认识JavaScript里的创建对象(一)
一.序 面向对象有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.ECMA-262把对象定义为"无序属性的集合,其属性可以包含基本值.对象或者函数&quo ...
- 现代3D图形编程学习--opengl使用不同的缓存对象(译者添加)
现代3D图形编程学习系列翻译地址 http://www.cnblogs.com/grass-and-moon/category/920962.html opengl使用不同的缓存对象 在设置颜色一章中 ...
- 找到一个新的超好用的U盘启动制作工具了
有同事叫帮装电脑,弄个U盘说制作一个启动盘,结果一搜,出了“雨林木风”的主页. 太好用了,高手的产物,比以前找的方便一百倍.又简单,又实用,同步又下载好GHO文件.唯一 的问题是XP中用的GHO,好多 ...
- ES6 对let声明的一点思考
说到ES6的let变量声明,我估计很多人会想起下面几个主要的特点: 没有变量声明提升 拥有块级作用域 暂时死区 不能重复声明 很多教程和总结基本都说到了这几点(说实话大部分文章都大同小异,摘录的居多) ...