首页 > 代码库 > 2014025689 《嵌入式系统程序设计》第五周学习总结
2014025689 《嵌入式系统程序设计》第五周学习总结
《嵌入式系统程序设计》第五周学习总结
一、6.5(标准I/O编程)主要涉及的函数及知识点
标准的I/O的三种缓冲存储:全缓冲、行缓冲、不带缓冲。
1. 全缓存:当填满标准I/O缓存后才进行实际的I/O操作
2. 行缓存:当输入或输出中遇到行结束符时,标准I/O库执行I/O操作
3. 不带缓存:标准I/O库不对字符进行缓冲
打开文件的三个标准函数:
fopen()、fdopen()和 freopen()。
-fopen()可以指定打开文件的路径和模式
函数原型:FILE * fopen(const char * path, const char * mode)
-fdopen()可以指定打开的文件描述符和模式
函数原型:FILE * fdopen(int fd, const char * mode)
-freopen()除可指定打开的文件、模式外,还可指定特定的I/O流。
函数原型:FILE * freopen(const char path, const char mode, FILE * stream)
参数:
* buffer:用于接收数据的地址(指针);
*size:要写入内容的单字节数;
*count:要进行写入size字节的数据项的个数;
*stream:目标文件指针;
关闭文件:
关闭标准流文件的函数为 fclose(),该函数将缓冲区内的数据全部写入到文件中,并释放系统所提供的文件资源。
函数原型:int fclose(FILE * stream)
读文件:
fread()在文件流被打开之后,可对文件流进行读写等操作,其中读操作的函数为 fread()。
函数原型:size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream)
ptr:存放读入记录的缓冲区;
size:读取的记录大小;
nmemb:读取的记录数;
stream:要读取的文件流;
字符输入输出:
-字符输入输出函数一次仅读写一个字符。
-函数原型(输出):int getc(FILE * stream) int fgetc(FILE * stream) int getchar(void)
-函数原型(输入):int putc(int c, FILE * stream) int fputc(int c, FILE * stream) int putchar(int c)
格式化输入输出
格式化输入输出函数可以指定输入输出的具体格式,这里有读者已经非常熟悉的 printf()、scanf()等函数。
int printf(const char format,…)
函数原型(输出):
int fprintf(FILE fp, const char format,…)
int sprintf(char buf, const char format,…)
int vprintf(const char format, va_list arg)
int vfprintf(FILE fp, const char format, va_list arg)
int vsprintf(char buf, const char format, va_list arg)
函数原型(输入):
int scanf(const char format,…)
int fscanf(FILE fp, const char format,…)
int sscanf(char buf, const char *format,…)
7.1(Linux进程概述)-7.2(linux进程控制编程)所涉及的函数及知识点
进程、程序:
进程是一个程序的一次执行的过程,也是资源分配的小单元
程序是静态的,它是一些保存在磁盘上的指令的有序集合,不进行活动。进程是动态的,它是程序执行的过程,是指程序动态创建、调度和消亡的整个过程
就像一个软件,其本身是一个程序,一旦启动了该软件,软件内部程序包含的命令就开始执行,这个执行的全过程就是程序了
进程控制块(PCB):
操作系统根据PCB来对并发执行的进程进行控制和管理
PCB包含了进程的描述信息、控制信息以及资源信息,它是进程的一个静态描述
进程的标识
进程标识有进程号和父进程号。其中 PID惟一地标识一个进程。PID和 PPID都是非零的正整数。
进程运行的状态
进程是程序的执行过程,根据它的生命周期可以划分成 3种状态。
执行态:该进程正在运行,即进程正在占用 CPU。
就绪态:进程已经具备执行的一切条件,正在等待分配 CPU的处理时间片。
等待态:进程不能使用 CPU,若等待事件发生(等待的资源分配到)则可将其唤醒。
Linux下的进程管理
Linux下的进程管理包括启动进程和调度进程。
-启动进程
Linux下启动一个进程有两种主要途径:手工启动和调度启动。
-调度进程
调度进程包括对进程的中断操作、改变优先级、查看进程状态等。
linux下进程相关的基本系统调用
- fork()函数:用于从已存在的进程中创建一个新进程。
- execlp("ps","ps","-ef",NULL)这个函数相当于调用“ps -ef”用于查看当前所有的进程
- execl("/bin/ps","ps","-ef",NULL)这个函数要注意写ps的完整路径。结果同上面的函数。
- execle("/usr/bin/env","env",NULL,envp)这个函数也要指出env的完整路径,envp是指针
-execve("/usr/bin/env",arg,envp)通过构造指针数组的方式来传递参数,注意参数列表一点要以NULL作为结尾标识符。
学习总结:
学习了fread和fwite的功能,并学习了fread和fwite的一些基本命令,学习了解了fork()函数。
进一步学会了Linux系统中进程和线程的基础知识,增加了印象和了解。
学习进度条:
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 9篇 | 180小时 | |
第一周 | 400/400 | 1/1 | 20/20 | 学会了Linux、Vim、gcc操作 |
第二周 | 800/800 | 2/2 | 40/40 | 学会了gdb、库、make编程 |
第三周 | 1400/1400 | 3/3 | 60/60 | |
第四周 | 2000/2000 | 3/4 | 80/80 | |
第五周 | 2600/2600 | 4/5 | 100/100 | 学会了Linux系统中进程和线程的基础知识 |
第六周 | /3200 | /6 | /120 | |
第七周 | /3800 | /7 | /140 | |
第八周 | /4400 | /8 | /160 | |
第九周 | /5000 | /9 | /180 |
参考资料
2014025689 《嵌入式系统程序设计》第五周学习总结