标准IO操作

1.标准IO的概念

IO:input   output

  • I:键盘是标准输入设备(默认输入就是指键盘)
  • O:显示器是标准输出设备(默认输出就是指显示器)

ANSIC 设计的一组用文件IO封装的操作库函数头文件:stdio.h 标准输入输出头文件
         /usr/include/stdio.h

< >  :是系统库函数,默认路径在/usr/include/
        eg : ====》stdio.h  ===>stdio.c==>libc.so ==>/usr/lib  so 动态库

 " " :  是用户自定义函数,默认是当前路径
eg : ===>xxx.h  ===>xxx.c

  • man  man  ==>所有man的帮助
  • man  xxx == man 1 xxx ===>查看当前xxx命令
  • man 2 xxx  ===>查看xxx对应的系统调用函数
  • man 3 xxx  ===》查看xxx对应的标准库函数

注意: 如果没有命令则直接man xxx 会显示其函数
          如果没有系统调用则显示系统库函数帮助

  1. Linux系统中IO都是对文件的操作。
  2. C语言中只有一部分,支持标准C的系统都可使用标准IO实现文件存储。
  3. 在UNIX中标准IO是对文件IO的封装。

        一般都是对普通文件操作,是一种有缓存的IO在文件IO和用户程序之间加入缓冲区,可以有效减少系统调用的效率,节省系统IO调度资源。

2.文件

概念:Linux中一切都是文件。

作用:用来存储数据(数据、指令)。

文件的打开

  1. 打开文件(fopen),FILE 
  2. 读写操作(fgetc/fputc 一个字符、fgets/fputs一次一行,只能处理文本文件、fread/fwrite 自定义大小,二进制)。
  3. 关闭文件  (fclose)
r只读文件,不存在报错,文件存在则只读打开
r+读写文件不存在报错文件存在则读写打开
w只写文件不存在则创建文件存在则清0只写打开
w+写读文件不存在则创建文件存在则清0写读打开
a追加可写文件不存在则创建文件存在则追加只写打开
a+追加读写文件不存在则创建文件存在则追加读写打开


 

文件的读写

1.fputc和fgetc

(1)fputc读文件

(2)fgetc写文件

2.fputs和fgets

(1)fputs读文件

#include <stdio.h>

int main(int argc, char *argv[])
{
    
    FILE* fp = fopen("1.txt","w");
    if(NULL == fp)
    {
        printf("fopen error\n");
        return 1;
    }

    char buf[500]="你好,fgets测试";
    int ret = fputs(buf,fp);
    if(EOF == ret)
    {
        printf("fputs errors\n"); 
        return 1;
    }
    fclose(fp);
    return 0;
}

​

(2)fgets

#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
    
    FILE* fp = fopen("/etc/passwd","r");
    if(NULL == fp)
    {
        printf("fopen error\n");
        return 1;
    }

    char buf[512]={0};
    
    while(1)
    {
        memset(buf,0,sizeof(buf));
        if(fgets(buf,sizeof(buf),fp))
        {
            printf("%s\n",buf);
        }
        else 
        {
            break;
        }
    }
    fclose(fp);
    return 0;
}

(3)fgets_cp

#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
    
    if(argc<3)
    {
        printf("usage:./a.out filename1 filename2\n");
        return 1;
    }

    FILE* src = fopen(argv[1],"r");
    FILE* dst = fopen(argv[2],"w");
    if(NULL == src ||NULL == dst)
    {
        printf("fopen error\n");
        return 1;
    }

    char buf[1024]={0};
    
    while(1)
    {
        memset(buf,0,sizeof(buf));
        if(fgets(buf,sizeof(buf),src))
        {
            //printf("%s\n",buf);
            fputs(buf,dst);
        }
        else 
        {
            break;
        }
    }
    fclose(dst);
    fclose(src);
    return 0;
}
3.fread和fwrite

(1)fwrite写文件

#include <stdio.h>
#include <string.h>
typedef struct 
{
    char name[10];
    int age;
    char phone[15];
}PER;
int main(int argc, char *argv[])
{
    FILE* fp = fopen("1.hex","w");//binary 
    if(NULL == fp)
    {
        printf("fopen error\n");
        return 1;
    }

    PER per;//memset 
    bzero(&per,sizeof(per));//bit zero 
    strcpy(per.name, "zhangsan");
    per.age = 20;
    strcpy(per.phone,"123467");

    fwrite(&per,sizeof(PER),1,fp);
    fclose(fp);

    return 0;
}

(2)fread读文件

#include <stdio.h>
#include <string.h>
typedef struct 
{
    char name[10];
    int age;
    char phone[15];
}PER;
int main(int argc, char *argv[])
{
    FILE* fp = fopen("1.hex","r");//binary 
    if(NULL == fp)
    {
        printf("fopen error\n");
        return 1;
    }
    ;
    PER per;//memset 
    bzero(&per,sizeof(per));//bit zero 
    fread(&per,sizeof(per),1,fp);
    printf("name:%s age:%d phone:%s\n",per.name,per.age,per.phone);
    fclose(fp);

    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值