当前位置: 首页 > news >正文

嵌入式学习笔记 D24 :系统编程之i/o操作

  • 系统编程基本概念及一般组成
  • 文件的常见i/o操作

一、系统编程基本概念及一般组成

        系统编程属于应用程序编程,即在操作系统运行成功的基础上执行程序。其一般包含以下四部分:

        1)文件:存储在存储设备上的相关信息集合,是操作系统管理数据存储的基本单元,有文本、二进制等类型,可通过文件系统操作。

        2)进程:程序在计算机中的一次执行过程,是资源分配的基本单位,有就绪、运行、阻塞等状态,由操作系统调度。计算机系统允许同一时刻多个进程同时进行。

        3)网络:通过通信链路和网络设备连接多个计算设备的系统,用于数据传输和资源共享,遵循 TCP/IP 等协议。

        4)数据库:长期存储在计算机内的有组织、可共享的数据集合,按特定数据模型组织,由数据库管理系统管理。

二、文件的常见i/o操作

        I/O 就是 Input/Output 的缩写,即输入/输出。I/O 设备就是可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备。例如鼠标、键盘就是输入设备,显示器就是一个输出设备,而移动硬盘是既可输入又可输出设备。
        Read 操作就是从外部设备读入数据,Write 操作就是向外部设备写出数据。

        1. 头文件:

        标准io:stdio.h  标准输入输出库。
        其在系统中的存在目录为:/usr/include/stdio.h。

        so动态库:stdio.c=>libc.so:gcc的前三步,so文件已经是二进制,也叫c库文件,调用系统级别的头文件,传入的是so动态库,路径在:usr/lib。调用系统级别函数都是以动态库提供的,系统负责将其连接在一起。

        <>为系统库函数,默认路径在/usr/include/;""是用户自定义函数,默认是当前路径。

        2.man手册:

        man  man  ==>所有man的帮助

        man  xxx == man 1 xxx ===>查看当前xxx命令

        man 2 xxx  ===>查看xxx对应的系统调用函数

        man 3 xxx  ===》查看xxx对应的标准库函数

        查看man手册时,着重阅读函数的几部分:

        1)看name后的函数功能

        2)头文件

        3)函数原型(返回值、参数个数、参数类型、参数含义)

        4)descrip中看类型与含义的意思

        5)return value的类型及意义

        3.文件操作的步骤:

        1)打开文件:fopen

  • r 只读 文件不存在报错  文件存在则只读打开;
  • r+ 读写 文件不存在报错 文件存在则读写打开;
  • w 只写 文件不存在则创建 文件存在则清0只写打开;
  • w+ 写 文件不存在则创建 文件存在则清0写读打开 。

        2)读写操作:

        fgetc/fputc ....一个字符;

        fgetc(int c ,FILE*strem);

        fgets/fputs....一次一行;

        fread/fwrite....自定义大小,二进制

        3)关闭文件:fclose

        4. 流
        1)流的定义: FILE*,即数据从文件当中流入和流出所体现出来的字节。

        2)流的分类:

                二进制流:2001 \n   二进制数据的流。
                文本流: ASCII码数据的流 \n \t 。
        3)FILE 结构定义的对象 FILE * 称之为流对象,也叫文件流指针。
             流对象 ===》头 《===数据====》尾

三、常见操作

        打开文件并写入:

#include<stdio.h>
 
 int main(int argc, char **argv)
{
    FILE*fp = fopen("1.txt", "w");//w会将文件清零
    if(NULL == fp)
    {
        fprintf(stderr, "fopen");
        return 1;
    }
 
    
    fputc('h',fp);
    fputc('e',fp);
    fputc('l',fp);
    fputc('l',fp);
    fputc('o',fp);
 
    fclose(fp);
    return 0;
}

        打开文件并读取:

#include<stdio.h>
 
int main(int argc, char **argv)
{
    FILE*fp=fopen("1.txt", "r");
    if(NULL == fp)
    {
        fprintf(stderr, "fopen error\n");
        return 1;
    }
    while(1)
    {
        int c=fgetc(fp);
        if(EOF == c)
        {
            break;
        }
        printf("%c",c);
    }
    fclose(fp);
    
    return 0;
}

        文件拷贝(按字节):

#include <stdio.h>

int main (int argc ,char **argv)
{
    if(argc < 3)
    {
        fprintf(stderr , "usage : ./a.out srcfile dstfile\n");
        return 1;
    }
    FILE *fp1 = fopen(argv[1],"r");
    FILE *fp2 = fopen(argv[2],"w");
    if(NULL == fp1 || NULL == fp2)
    {
        fprintf(stderr , "fopen error");
        return 1;
    }
    while(1)
    {
        int c = fgetc(fp1);

        if(EOF == c)
        {
            break;
        }
        fputc(c,fp2);
    }
    fclose(fp1);
    fclose(fp2);
}

        文件拷贝(字符串):

#include <stdio.h>

int main (int argc ,char **argv)
{
    if(argc < 3)
    {
        fprintf(stderr , "usage : ./a.out srcfile dstfile\n");
        return 1;
    }
    FILE *fp1 = fopen(argv[1],"r");
    FILE *fp2 = fopen(argv[2],"w");
    if(NULL == fp1 || NULL == fp2)
    {
        fprintf(stderr , "fopen error");
        return 1;
    }
    while(1)
    {
        char buf[1024] = {0};
        if(NULL == fgets(buf,sizeof(buf),fp1))
        {
            break;
        }
        
        fputs(buf,fp2);
    }
    fclose(fp1);
    fclose(fp2);
}

相关文章:

  • PyTorch 之 torch.distributions.Categorical 详解
  • MATLAB中进行语音信号分析
  • USB学习【13】STM32+USB接收数据过程详解
  • 关于element-ui的table type=“expand“ 嵌套表格展开异常问题解决方案
  • CYT4BB Dual Bank 1 - 存储机制
  • 02 基本介绍及Pod基础排错
  • P/Invoke 内存资源处理方案
  • Linux bash shell的循环命令for、while和until
  • C++面向对象——多态
  • 单片机复用功能重映射Remap功能
  • 基于单片机的车辆防盗系统设计与实现
  • 第六部分:第三节 - 路由与请求处理:解析顾客的点单细节
  • 【基础知识】SPI协议的种类及异同
  • OpenCV CUDA 模块特征检测与描述------在GPU上执行特征描述符匹配的类cv::cuda::DescriptorMatcher
  • SetThrowSegvLongjmpSEHFilter错误和myFuncInitialize 崩溃
  • 宝塔+fastadmin:给项目添加定时任务
  • 汽车区域电子电气架构(Zonal E/E)的统一
  • CentOS 7上BIND9配置DNS服务器指南
  • SpringSecurity基础入门
  • 使用Mathematica绘制一类矩阵的特征值图像
  • “共栖与绵延”系列对话|张国捷、刘帅:以蚁为序的生命网络
  • 河南发布高温橙警:郑州、洛阳等地最高气温将达40℃以上
  • 女排奥运冠军宋妮娜:青少年保持身心健康才能走得更远
  • 沃尔玛上财季净利下滑12%:关税带来成本压力,新财季价格涨幅将高于去年
  • 新修订的《餐饮业促进和经营管理办法》公布,商务部解读
  • 新版城市规划体检评估解读:把城市安全韧性摆在更加突出位置