第一天-----fopen使用

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);
}

(未加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);
}

(未加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);
}

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

fopen(): No such file or directory

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

时间: 2024-10-13 15:52:37

第一天-----fopen使用的相关文章

fopen的第一个参数不能有&#39;\n&#39;

我刚才写了个程序, 需要操作两个文件.  我用fgets获取标准输入流stdin中的文件名, 然后用fopen打开. 结果编译器总是抱错.  调试了一下,发现fopen返回的是NULL. 我在此处加了个ferror, 系统提示 无效的参数.  我首先排出了第二个参数,那就是第一个参数出现了问题.  我检查了一下存放文件名的数组,发现最后一个字符'\0‘前含有一个换行符. 会不会是换行符出了问题?  我用gets获取文件名( 因为gets和fgets的区别有:前者会将换行符替换成空字符, 而后者会

文件流:&quot;fopen&quot;,&quot;fclose&quot;,“ftell”&quot;fseek&quot;,&quot;fgets&quot;,&quot;fprintf&quot; ,“feof”,&quot;fwrite&quot;,&quot;fread&quot;

char const* filename="D:/hello.txt"; "fopen", FILE *fp=fopen(char const *name,char const mode); e.g:FILE *fp = fopen(filename,"wb"); 打开文件流,name为要打开文件的路径,如这里的filename:mode 为对文件的操作模式,通常使用:"wb"(写操作),"rb"(读操作)

fopen()和fclose()的用法

1.fopen()函数的用法fopen函数用于打开文件, 其调用格式为:FILE *fopen(char *filename, *type);fopen()函数中第一个形式参数表示文件名, 可以包含路径和文件名两部分.如:"B:TEST.DAT""C:\\TC\\TEST.DAT"注意:如果将路径写成"C:\TC\TEST.DAT"是不正确的, 这一点要特别注意.fopen函数用来打开一个文件,其调用的一般形式为: 文件指针名=fopen(文件名

c语言走向c++的第一步,注释转换

最近刚开始学习c++,接触了一个小项目,写一个程序将C语言的注释转化为c++的注释,这个里面也要分很多种情况,下面我就把我做的小程序分享出来,在把C语言注释转化为c++注释的过程中,列举了以下几种情况 1.普通情况 /*int i = 0; 2.换行问题 /*int i = 0;*/int j = 0; /*int i = 0;*/ int j = 0; 3.匹配问题 /*int i = 0;/*xxxxx*/ 4.多行注释 /*int i = 0; int j = 0; int k = 0;

标准IO: 文件的打开与关闭函数 fopen &amp; fclose

(1) 流(stream)和文件(file)    流和文件 在Turbo C2.0中是有区别的, Turbo C2.0 为编程者和被访问的设备之间提供了一层抽象的东西, 称之为"流", 而将具体的实际设备叫做文件.流是一个逻辑设备, 具有相同的行为.因此, 用来进行磁盘文件写的函数也同样可以用来进行打印机的写入.在Turbo C2.0中有两种性质的流:   文字流( text stream)和二进制(binary stream).对磁盘来说就是文本文件和二进制文件.本软件为了便于让读

第一章:引言

1.1文学程序 文学程序(literate program):接口及其实现的代码与对其进行解释的正文交织在一起.文学程序由英文正文和带标签的程序代码块组成.例如, 1 〈compute x * y〉≡ 2 sum = 0; 3 for (i = 0; i < n; i++) 4 sum += x[i]*y[i]; 定义了名为〈compute x * y〉的代码块,其代码计算了数组x和y的点积.在另一个代码块中使用该代码块时,直接引用即可: 1 〈function dotproduct〉≡ 2 i

FILE文件流的中fopen、fread、fseek、fclose的使用

FILE文件流用于对文件的快速操作,主要的操作函数有fopen.fseek.fread.fclose,在对文件结构比较清楚时使用这几个函数会比较快捷的得到文件中具体位置的数据,提取对我们有用的信息,满足编程中的需要.以下分别进行说明,还有他们使用时的注意事项 fopen 函数原型    FILE * fopen(const char *path,cost char *mode) 作用:打开一个文件,返回指向该文件的指针 参数说明:第一个参数为欲打开文件的文件路径及文件名,第二个参数表示对文件的打

fopen()函数

1.2 文件的输入输出函数 键盘.显示器.打印机.磁盘驱动器等逻辑设备, 其输入输出都能够通过文件管理的方法来完毕.而在编程时使用最多的要算是磁盘文件, 因此本节主要以磁盘文件为主, 具体介绍Turbo C2.0提供的文件操作函数, 当然这些对文件的操作函数也适合于非磁盘文件的情况. 另外, Turbo C2.0提供了两类关于文件的函数.一类称做标准文件函数也称缓冲型文件函数, 这是ANSI标准定义的函数; 还有一类叫非标准文件函数, 也称非缓冲型文件函数.这类函数最早公用于UNIX操作系统,

第一天:Linux基础知识

一.Linux的发展 1. 二.Linux的不同版本以及应用领域 1.Linux内核及发行版介绍 <1>Linux内核版本 内核(kernel)是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供了一个在裸设备与应用程序间的抽象层 Linux内核版本又分为稳定版和开发版,两种版本=是相互关联,相互循环: 稳定版:具有工业级强度,可以广泛地应用和部署.新的稳定版相对于较旧的只是修正一些bug或加入一些新的驱动程序 开发版:由于要试验各种解决方案,所以变化很快 <2>