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

嵌入式学习笔记 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);
}

http://www.xdnf.cn/news/7776.html

相关文章:

  • 解决 Incorrect username or password (access token)
  • 数据库错误解决指南:从诊断到修复的全流程攻略
  • 04 接口自动化-框架封装思想建立之httprunner框架(上)
  • Fiddler 指定链接断点
  • nettrace工具介绍
  • GraphPad Prism工作表的管理
  • Baumer工业相机堡盟工业相机的工业视觉如何对高反光圆柱体生产日期进行识别检测
  • 8.MySQL故障排查与生产环境优化
  • 铸铁平台:承载千斤重担的工业基石
  • 视觉语言模型之困:当否定词成为理解的“盲区”
  • 挖o心得(2)
  • TYUT-企业级开发教程-第6章
  • CUMT-教务系统登录功能实现
  • labelme的安装与使用(以关键点检测为例)、labelme格式标签转换
  • 基础知识与协议
  • 迁移学习:让AI像人类一样举一反三的智慧引擎
  • CNN、RNN、Transformer对于长距离依赖的捕捉能力分析
  • Node.js AI 通义灵码 VSCode 插件安装与功能详解
  • 【Linux】48.高级IO(2)
  • Leetcode 01 java
  • 已解决:Git冲突完全解决指南(附最佳实践)
  • ANSI V 级对夹球阀控制阀:高性价比零泄漏流体控制新选择-耀圣
  • Windows下使用Windeployqt.exe打包后运行exe程序报错0xc000007b问题解决方法
  • 数组day2
  • 在hadoop中实现序列化与反序列化
  • YOLOv12和MAF-YOLO的核心技术细节
  • 软考软件评测师——软件工程之开发模型与方法
  • Java中的工具类Collections和Arrays
  • odoo-052 odoo启动提示:OSError: [Errno 98] Address already in use,端口占用
  • 一些C++入门基础