标准IO的函数学习

打开文件:fopen

函数简介:

 #include <stdio.h>
 FILE *fopen(const char *pathname, const char *mode);

功能:打开文件

参数:pathname:文件路径(有路径的文件名)

           mode:打开的方式:

方式        权限                  文件要求                                                写的形式

r              只读                  文件必须存在                        

r+            可读可写           文件必须存在                                        清空模式

w             只写                  文件可以不存在,不存在则创建           清空模式

w+           可读可写           文件可以不存在,不存在则创建           清空模式

a              只写                  文件可以不存在,不存在则创建           追加模式

a+            只写                  文件可以不存在,不存在则创建           追加模式

返回值:

成功:流(文件指针)

失败:NULL,返回错误码

关闭文件:flose

函数简介:

        #include <stdio.h>
        int fclose(FILE *stream);

功能:关闭文件

参数:流strem

返回值:成功返回0

              失败则返回错误码

        int argc,char *argv[]
        //argc:命令行中的参数个数
        //argv:命令行参数
        #include <stdio.h>
        #include <stdlib.h>
        int main(int argc,char *argv[])
        {
            FILE *fp;
            if(argc!=2){
                printf("User:%s <filename>\n",argv[0]);
                exit(1);
                }   
            fp=fopen(argv[1],"r");
            if(NULL==fp){
                perror("fopen");
                }   
            return 0;
        }

流的读写

1、一次一个字符

读取:

        fgetc

        函数简介:

                        #include <stdio.h>
                        int fgetc(FILE *stream);

功能:根据相应文件的流,读取一个字符;

参数:流strem

返回值:成功返回读取到的字符

              失败返回错误码

            宏:getc
                man getc
        #include <stdio.h>
        int getc(FILE *stream);
        getc是fgetc的宏定义
        最大的区别是fgetc是函数,getc是宏。
        getc是fgetc通过宏实现的,调用的时候需要注意:
                                参数stream不能是有副作用的表达式
                                
        功能参数返回值都和fgetc是一样的
        #define getc fgetc
        #define wyz  fgetc

    getchar();
    #include <stdio.h>
    int getchar(void);
    功能:
            在标准输入读取一个字符
    参数:
                空
    返回值:
            成功读取一个字符
            失败返回错误码
    一般getchat 一般用于清理垃圾字符

写的操作(一次一个字符)

fputc();

函数简介:

        #include <stdio.h>
        int fputc(int c, FILE *stream);

功能:对相对应的流写入一个字符

参数:c;需要写入的字符

           stream:流

返回值:

                成功:写入字符

                失败:返回错误码

putc();
        man putc
        #include <stdio.h>
        int putc(int c, FILE *stream);
        putc是fputc的宏,用法和fputc一模一样
        #define putc fputc
        *****************************************
        putchar
        man putchar
        #include <stdio.h>
        int putchar(int c);
        功能:
                向标准输出写一个字符
        参数:
                c:需要写入的字符
        返回值:
                成功:写入的字符
                失败:返回错误码

2、一次一行字符

读取:

        fgets();

        函数简介:

             #include <stdio.h>
            char *fgets(char *s, int size, FILE *stream);

功能:
                    对相应的文件读取一行数据,如遇到“\n”则停止读取
                    
            参数:
                    s:读出一行数据放置的地方,char buf[128]
                    size:读取数据的最大的限度,读一次读多少个字节,size-1,‘\0’
                    stream:流
            返回值:
                    成功:读出数据存放的地址
                    失败:NULL并返回错误码
                    
            ************************************
            gets();
            #include <stdio.h>
            char *gets(char *s);
            为了安全,gets少用,因为其没有指定输入字符的大小,
            限制输入缓冲区的大小,如果输入的字符比定义的数组长度大的话,
            容易发生内存越界,堆栈溢出。
            功能:
                    在标准输入读取一行数据
                    
            参数:
                    s:读出一行数据放置的地方,char buf[128]

            返回值:
                    成功:读出数据存放的地址
                    失败:NULL并返回错误码
                    
                    
        写的操作(一次一行字符)
                fputs
                #include <stdio.h>
                int fputs(const char *s, FILE *stream);
                功能:
                        写入一行数据到相应的文件中
                参数:
                        s:写入一行数据放置的地方,char buf[128]
                        stream:流
                返回值:
                        成功返回非负数
                        失败返回错误码
                
        *************************************
        puts
        #include <stdio.h>
        int puts(const char *s);
        功能:
                向标准输出写一行字符
        参数:
                s:写入一行数据放置的地方,char buf[128]
        返回值:
                成功返回非负数
                失败返回错误码


        3、一次一块字符------*
        读取(一次读取一块字符)
        fread
        man fread
        #include <stdio.h>
        size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
        功能:
                在相应的流中读取一块字符
        参数:
                ptr:读取数据所放置的位置
                size:读取一次要读多少个字节
                nmemb:运行一次函数,读取多少次数据
                stream:流
        返回值:
                成功返回:读取的次数
                失败返回:0
        
        
        写入(一次写入一块字符)
        fwrite
        #include <stdio.h>
        size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
        功能:
                写入一块数据到相应的文件中
        参数:
                ptr:写入数据所放置的位置
                size:写入一次要写多少个字节
                nmemb:运行一次函数,写入多少次数据
                stream:流
        返回值:
                成功返回:写入的次数
                失败返回:0

拓展:
       #include <strings.h>
       void bzero(void *s, size_t n);
        功能:
                清空数组
        参数:
                s:清空的数组
                n:数组的大小
                
    移动光标-----*:
        ftell
        #include <stdio.h>
        long ftell(FILE *stream);
        功能:ftell告诉我们光标的位置在哪;
        参数:流stream
        返回值:成功返回光标当前位置
                失败返回-1.并返回错误码
                
        #include <stdio.h>        
        void rewind(FILE *stream);
        功能:
                将光标移动回文件头部
        参数:
                流stream
                
        返回值:成功返回光标当前位置
                失败返回-1.并返回错误码
                
        fseek()----*
        #include <stdio.h>
        int fseek(FILE *stream, long offset, int whence);
        功能:
                根据参数的信息,相应的移动光标
        参数:
                stream:流
                offset:偏移量
                whence:起始位置
                            SEEK_SET---文件的头部
                            SEEK_CUR---光标的当前位置
                            SEEK_END---文件末尾
        返回值:
                成功返回0
                失败返回-1.并返回错误码
                
                

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值