嵌入式学习---DAY19:标准IO

news2024/11/24 14:11:07

1. I:   input     输入     键盘

   O:output    输出    显示器

2.Linux操作系统当中IO都是对文件的操作,linux下一切皆文件,文件用来存储数据(数据,指令)。

3.stdio.h  标准输入输出头文件。             /usr/include/stdio.h
<>   是系统库函数,默认路径在/usr/include/
eg : ====》stdio.h  ===>stdio.c==>libc.so ==>/usr/lib  so 动态库
" "   是用户自定义函数,默认是当前路径

4.man函数:2章节的函数只能在linux下使用,3章节的函数则是通用,4章节是一些特殊文件。

5.linux最高用户为root,第二为linux。

6.(1)打开文件                              (2)io操作,读写操作                              (3)关闭文件

7.流的分类:  二进制流:       2001 \n              二进制数据的流
文本流:   ASCII码数据的流 \n \t ,FILE 结构定义的对象,FILE * 称之为流对象,也叫文件流指针。

8.文件内容的分类, 文本文件,二进制文件 

9.      stdin               stdout                  stderr

      标准输入        标准输出           标准错误输出

stdout与stderr的区别在缓冲区

当./a.out开始运行的时候,系统就已经打开了三个FILE*


#include <stdio.h>
/*
 *当a.out开始运行的时候 ,系统就已经打开了3个FILE* 
 stdin  标准输入
 stdout 标准输出
 stderr 标准错误输出 区别在于缓存区
 * */
int main(int argc, char *argv[])
{
    //scanf scanf("%s %s ") 
    char buf[512]={0};
    fgets(buf,sizeof(buf),stdin);// hello aaa bbb ccc\n 
    //printf("%s\n",buf);
    //fputs(buf,stdout);
    fputs(buf,stderr);
    return 0;
}

一、打开文件

fopen

#include <stdio.h>

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

    return 0;
}

二、读写操作

读   r    r+             目标文件必须存在

写   w    w+

1.fputc/fgetc(一次一个)

1.fputc函数

#include <stdio.h>

int main(int argc, char *argv[])
{
    
    FILE* fp = fopen("1.txt","w");
    if(NULL == fp)
    {
        printf("fopen error");
        return 1;
    }
     int ret = fputc('h',fp);// end of file 
     if(EOF == ret)
     {

         printf("fputc error");
         return 1;
     }
     fputc('e',fp);// end of file 
     fputc('l',fp);// end of file 
     fputc('l',fp);// end of file 
     fputc('o',fp);// end of file 
     fclose(fp);

    return 0;
}

2.fgetc函数

#include <stdio.h>

int main(int argc, char *argv[])
{
    
    FILE* fp = fopen("1.txt","r");
    if(NULL == fp)
    {
        printf("fopen error");
        return 1;
    }
    while(1)
    {
        int c = fgetc(fp);
        if(EOF ==c) // -1 
        {
            break;
        }
        printf("%c",c);
    }
    printf("\n");
    fclose(fp);


    return 0;
}

3.cp-fgetc

#include <stdio.h>

int main(int argc, char *argv[])
{
    
    FILE* src = fopen("1.txt","r");
    FILE* dst =fopen("2.txt","w");
    if(NULL == src || NULL == dst)
    {
        printf("fopen error");
        return 1;
    }
    while(1)
    {
        int c = fgetc(src);
        if(EOF == c)
        {
            break;
        }
        fputc(c,dst);
    }
    fclose(dst);
    fclose(src);

    return 0;
}

2.fgets/fputs(一次一行)

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.cp-fgets

fgets/fputs只能处理文本,不能处理二进制文件

#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.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;
}

2.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;
}

三、关闭文件

flose

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1982902.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最新全国各省市水系矢量数据(2024年更新)

【数据简介】 来源于OSM在2024年7月份更新的全国范围的水系数据&#xff0c;并将其处理成各省、各市区域。OpenStreetMap&#xff08;OSM&#xff09;是一个全球性的开放源地图项目&#xff0c;旨在通过用户合作创建一个免费的、可编辑的世界地图。其数据广泛被用于地理信息系…

K个一组翻转链表(LeetCode)

题目 给你链表的头节点 &#xff0c;每 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值&…

Java单元覆盖率工具JaCoCo使用指南

JaCoCo&#xff08;Java Code Coverage Library&#xff09;是一款开源的Java代码覆盖率工具&#xff0c;它提供了详细的代码覆盖信息&#xff0c;帮助开发人员了解测试用例对代码的覆盖情况&#xff0c;从而发现潜在的问题和改进空间。以下是关于JaCoCo的详细介绍&#xff1a;…

[算法]二叉搜索树(BST)

二叉搜索树&#xff08;Binary Search Tree&#xff09;&#xff0c;也称二叉排序树或二叉查找树。 一、二叉搜索树的性质 二叉搜索树是一棵二叉树&#xff0c;可以为空。 当二叉搜索树不为空时&#xff1a; 1、非空左子树的所有键值小于其根结点的键值。 2、非空右子树的所有…

linux开发板配置-双网卡桥接-问题记录

韦东山i.mx6ull开发板 使用usb网卡连接电脑&#xff0c;ubuntu进行双网卡配置 问题&#xff1a; mount: mounting 192.168.96.131:/home/book/nfs_rootfs on /mnt failed: No route to host 乱七八糟各种配置&#xff0c;能ping通&#xff0c;但是nfs挂载不上 解决&#xff1a…

推荐系统与搜索系统架构

一、推荐系统逻辑 推荐的本质就是为了解决信息过载造成的“选择困难症”&#xff0c;便于用户能够在自己选物之前&#xff0c;系统已经帮用户筛选到了最想要的信息。 以下是我按照用户打开APP进入推荐页面时&#xff0c;推荐系统返回给该用户推荐列表的整体流程&#xff1a; …

Xshell安装图文

1.下载 通过百度网盘分享的文件&#xff1a;Xshell安装图文 链接&#xff1a;https://pan.baidu.com/s/1k4ShbhUVQmdxpM9H8UYOSQ 提取码&#xff1a;kdxz --来自百度网盘超级会员V3的分享 2.安装 3.连接与使用 见下载

vector 简单模拟实现

目录 一. vector成员变量 二. vector的构造函数和析构函数 三. vector的成员函数 1. 容量操作函数 扩容操作 (1). finish更新问题 (2). 扩容深浅拷贝问题 resize与尾插、尾删与判空 insert与erase与clear 2. 函数重载 (1). 赋值运算符重载 (2). [ ]重载进行访问 四. …

phpstudy搭建sqlilabs本地靶场

请先在网上解决好前置条件的下载和安装&#xff1a;phpstudy、vscode、navicat premium(非必要)、sqlilab的压缩包/文件夹 phpstudy--安装sqlilabs 1.打开phpstudy后&#xff0c;我们会用到MySQL5.7.26和Nginx1.15.11 #mysql5.7.26是因为sqlilabs靶场不支持高版本MySQL 2.在软…

练习实践 web中间件httpd-id:2-编译安装-web登录认证设置

参考来源&#xff1a; 用编译的方式安装apache httpd服务 编译安装过程记录 1.下载准备环境&#xff1a; yum -y install gcc gcc-c make pcre pcre-devel gd-devel openssl-devel zlib zlib-devel apr-*根据之前的操作文档和实际安装经验&#xff0c;提前将所需依赖项安装…

sqli-labs注入练习1,2关

sqli-labs第一关 判断是否存在sql注入 可见&#xff0c;根据输入数字的不同&#xff0c;结果也不同 判断sql语句是否是拼接&#xff0c;且是字符型还是数字型 由上可见&#xff0c;这关指定是字符型且存在sql注入漏洞 使用联合注入 第一步&#xff1a;首先知道表格有几列&…

PyCharm 2024.1 最新变化

文章目录 PyCharm 2024.1 最新变化一、新的 AI Assistant 功能 PyCharm Professional1、一键创建包含生成代码的文件2、生成架构感知型 SQL 查询 二、缩小整个 IDE 的选项三、新终端 Beta PyCharm 2024.1 最新变化 pycharm是什么 作为 JetBrains 旗下的一款专为 Python 开发者设…

SQL注入之sqli-labs靶场第二关

手工注入less-2 1.找注入点 通过 ?idsdfsdf 报错发现注入点 经过尝试没有闭合发现是数字型注入 2.猜解字段数量 发现字段数量为3 3.通过union联合查询判断回显点 发现回显点2&#xff0c;3&#xff0c; 4&#xff0c;进行信息收集 数据库版本号&#xff1a;5.7.26 数据库…

【MongoDB】1.MongoDB下载与安装

目录 一、下载 二、安装 三、安装MongoDB Compass 四、连接 一、下载 官网地址&#xff1a; https://www.mongodb.com/download-center/community 二、安装 详细的安装教程可参考&#xff1a; MongoDB安装&#xff08;超详细&#xff09;_安装mongodb-CSDN博客 注意事项1&…

亚马逊爬虫(Amazonbot)IP地址,真实采集数据

一、数据来源&#xff1a; 1、这批亚马逊爬虫&#xff08;Amazonbot&#xff09;IP来源于尚贤达猎头公司网站采集数据&#xff1b; ​ 2、数据采集时间段&#xff1a;2023年10月-2024年7月&#xff1b; 3、判断标准&#xff1a;主要根据用户代理是否包含“Amazonbot”和IP核…

C# Unity 面向对象补全计划 七大原则 之 依赖倒置原则 (DIP)难度:☆☆ 总结:多抽象,多接口,少耦合

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识&#xff0c;看不懂没关系 请看专栏&#xff1a;http://t.csdnimg.cn/mIitr&#xff0c;查漏补缺 1.依赖倒置原则 (DIP) 这…

【算法题】无重复字符的最长子串(滑动窗口)

目录 一、题目描述 二、解题思路 1、什么是滑动窗口算法&#xff1f; 2、滑动窗口一般解题模板 三、参考答案 一、题目描述 无重复字符的最长子串 给定一个字符串s &#xff0c;请你找出其中不含有重复字符的最长子串的长度。 示例 1: 输入: s "abcabcbb"…

【Linux】vim(工具篇)

文章目录 什么是vimvim的使用普通模式&#xff08;Normal Mode&#xff09; 命令模式&#xff08;Command Mode&#xff09;批量化注释/批量化去注释 vim的配置 什么是vim Vim 是一种高度可配置的文本编辑器&#xff0c;最初由 Bram Moolenaar 在 1991 年基于 vi 编辑器创建。V…

力扣——238.移动零

题目 思路 利用双指针&#xff0c;先找到第一个为0的地方指向&#xff0c;指针2指向下一个&#xff0c;指针1之前是已经处理好的数据&#xff0c;指针2进行遍历&#xff0c;遇到非零则与指针1数据交换&#xff0c;然后指针1。 代码 class Solution { public:void moveZeroes(…

OpenAI not returning a result?

题意&#xff1a;OpenAI 没有返回结果吗&#xff1f; 问题背景&#xff1a; Im trying to use the OpenAI beta but I cant seem to get a result. Im accessing the API via an NPM package (openai-api - npm). I have that setup and working but when I make a request th…