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