码迷,mamicode.com
首页 > 其他好文 > 详细

第一天-----fopen使用

时间:2015-08-31 00:44:49      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

FILE *fopen(const char *path, const char *mode);
/**/
FILE *fdopen(int fd, const char *mode);

打开一个流

参数一:const修饰,指定的文件---打开路径名为path的一个指定的文件

参数二:const修饰,指定对该I/O流的读写方式

ps:起始位置:文件的第一个有效字符

      文件尾端:文件的最后一个有效字符的下一个字符

///////////////////要求文件存在////////////////////////

r: 只读方式打开,并指向文件的起始位置。

r+:读写方式打开,并指向文件的起始位置。

//////////////////文件不存在则会创建//////////////////////////

w:写的方式打开。把文件截断是0,并指向文件的起始位置。

w+:读写方式打开。如果文件不存在则创建文件,文件存在则截断至0,并指向文件的起始位置。

a:追加写的方式打开,如果文件不存在则创建文件,并指向文件的尾端。

a+:追加读写的方式打开,如果文件不存在则创建文件。读文件->文件位置指针指向文件起始位置,写文件->文件位置指针指向文件尾端。

mode字符中可以包括字符‘b’:一种是文本流 一种是二进制流,在所有的POSIX包括linux环境  ‘b’会被忽略。

返回值:

成功返回一个文件指针,失败返回NULL,并设置errno;

errno:打开/usr/include/asm-generic/errno.h或者/usr/include/asm-generic/errno-base.h会发现errno的宏定义 现在errno已经被私有化

#include <errno.h>

errno

gcc -E:以#号开头的文件都会在预处理部分加载到文件

会发现,里面没有errno的定义

(*__errno_location ())

ps:

参数用const修饰:告诉USER,函数的参数为常量指针,在使用该函数的过程中不会改变传过来的参数,以只读的方式操作参数 

eg:

? "xbc" ?
这个指针指向的常量
通过指针不能改变一个常量的内容
不同编译环境结果是不一样的
linux会把常量放到常量区,所以修改不了ptr

范例:

目的:测试文件以“r”或者“r+”的方式打开一个不存在的文件,打印errno。

技术分享
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main(void)
{
    FILE *fp;
    fp = fopen("temp","r");
    if( fp == NULL)
    {
        fprintf(stderr , "fopen() failed . errno = %d\n",errno);
        exit(1);
    
    }
    exit(0);
}
View Code

(未加fclose(FILE *)编译完成后,运行可执行文件发现打印信息:

fopen() failed . errno = 2

查看/usr/include/asm-generic/errno-base.h   ----->errno = 2 时  是没有找到文件或者目录

#define ENOENT       2  /* No such file or directory */

查看文件出错原因,打印错误信息

1:

void perror(const char *s); //  s 人为规定的串后面添加错误信息---自动关联全局变量errno
技术分享
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

int main(void)
{
    FILE *fp;

    fp = fopen("temp","r");
    if( fp == NULL)
    {
        //fprintf(stderr , "fopen() failed . errno = %d\n",errno);
        perror("fopen()");
        exit(1);
    }
    exit(0);
}
View Code

(未加fclose(FILE *),编译完成,运行程序,打印信息

fopen(): No such file or directory

2:

#include <string.h>
char *strerror(int errnum);//

参数:errno

返回值:用来描述errno的字符串

技术分享
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
int main(void)
{
    FILE *fp;

    fp = fopen("temp","r");
    if( fp == NULL)
    {
        //fprintf(stderr , "fopen() failed . errno = %d\n",errno);
        //perror("fopen()");
        fprintf(stderr,"fopen():%s\n",strerror(errno));
        exit(1);
    
    }
    exit(0);
}
View Code

(未加fclose(FILE *),编译完成,运行程序,打印信息

fopen(): No such file or directory

 

-----------------------------fopen over----------------------------------------

 

第一天-----fopen使用

标签:

原文地址:http://www.cnblogs.com/muzihuan/p/4771640.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!