2014025674(16) 《嵌入式系统程序设计》第五周学习总结

一、标准I/O的编程

fread与fwrite

1.fread是一个函数,是计算机程序中从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功返回 0。

函数原型为:

size_t fread( void * buffer , size_t size , size_t count , FILE * stream );

2.fwrite是一个C语言函数,向文件写入一个数据块。函数写入文件(可安全用于二进制文件)。把 string 的内容写入文件指针 file 处。 如果指定了 length,当写入了 length 个字节或者写完了string 以后,写入就会停止,视乎先碰到哪种情况。fwrite()返回写入的字符数,出现错误时则返回 false。

size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);

3.功能与参数

  • fread功能: 从一个文件流中读数据,读取 count个元素 ,每个元素 size字节.如果调用成功返回 值大于count。如不成功,返回实际读取的元素个数,小于count.
  • 参数buffer: fresd中用于接收数据的内存地址,大小至少是 size* count字节. size:单个元素的大小,单位是字节 count:元素的个数,每个元素是size字节. stream:输入流 返回值:实际读取的元素个数.如果返回值与 count不相同,则可能文件结尾或发生错误;fwrite中是一个指针,对fwrite来说,是要获取数据的地址; size:要写入内容的单字节数; count:要进行写入size字节的数据项的个数; stream:目标文件指针; 返回值:返回实际写入的数据项个数count。

二、linux下进程相关的基本系统调用

1.函数

  • 函数的理解

      fork()函数用于从已存在的进程中创建一个新进程,新进程称为子进程,而原进程称为父进程。

       使用fork()函数得到的子进程是父进程的一个复制品,从父进程处继承了整个进程的地址空间,而子进程所独有的只有它的进程号、资源使用和计时器等,使用fork()函数,执行速度不是很快。

  • 函数语法

所需头文件

#include<sys/types.h> // 提供类型 pid_t的定义
#include<unistd.h>
  • 函数原型
pid_t fork(void)
  • 函数返回值

0:子进程

子进程ID(大于0的整数):父进程

-1:出错

  • 函数使用注意点:fork()函数使用一次就创建一个进程,所以若把fork()函数放在了if else判断语句中则要小心,不能多次使用fork()函数

2. exec族函数

  • 作用:exec族函数可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外全被新的进程替换了。
  • 在 Linux 中使用exec函数族主要有两种情况。当进程认为自己不能再为系统和用户做出任何贡献时,可以调用exec函数族让自己重生。 如果一个进程想执行另一个程序,可以调用 fork()函数新建一个进程,然后调用exec函数族中的任意一个函数。

3. exit()、_exit()

  • 作用:exit()和_exit()函数都是用来终止进程的。当程序执行到 exit()或_exit()时,进程会无条件地停止剩下的所有操作,清除包括PCB在内的各种数据结构,并终止本进程的运行。
  • 区别:

_exit()函数直接调用exit系统使进程停止运行, 清除其使用的内存空间,并清除其在内核中的各种数据结构;

exit()函数则在调用exit系统之前做了调用退出处理函数、清理 I/O 缓冲等保障了缓冲区内的数据不会直接丢失。

4. wait()、waitpid()

  • 作用:

wait()用于使当前进程阻塞,直到一个子进程结束或者当前进程接到了一个指定的信号为止。如果该父进程没有子进程或者他的子进程已经结束,则wait()就会立即返回。

      waitpid()的作用和wait()一样,但它并不一定要等待第一个终止的子进程,它还有若干选项。实际上 wait()函数只是 waitpid()函数的一个特例,在 Linux 内部实现                  wait()函数时直接调用的就是 waitpid()函数。

三、线程进程与程序

  • 线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。
  • 进程(英语:process),是计算机中已运行程序的实体。进程为曾经是分时系统的基本运作单位。在面向进程设计的系统(如早期的UNIX,Linux 2.4及更早的版本)中,进程是程序的基本执行实体;在面向线程设计的系统(如当代多数操作系统、Linux 2.6及更新的版本)中,进程本身不是基本运行单位,而是线程的容器。
  • 计算机程序(Computer Program)是指一组指示计算机或其他具有消息处理能力装置每一步动作的指令,通常用某种程序设计语言编写,运行于某种目标体系结构上。
时间: 2024-11-05 20:29:45

2014025674(16) 《嵌入式系统程序设计》第五周学习总结的相关文章

2014025670(12)《嵌入式系统程序设计》第二周学习总结

这周学习了gcc和gdb的使用还有makefile. 教材学习内容总结 教材内容开始看的有些吃力,很多地方都不太懂,网上查询和询问同学和老师之后,了解了很多,但是具体操作和实现方面还是比较难. 教材学习中问题和解决过程 对于gcc的操作在实验楼的学习中还是比较顺利,gdb的操作感觉有些村存在问题-----gdb的调试方面有些吃力,应该是自己没努力的结果,打算把问题汇总一下,再试试实验. 课后作业中的问题和解决过程 应用实验楼的第二周,第一周的内容感觉简单,消化很快,没想到第二周就感觉有些吃力,不

2014025663(05)《嵌入式系统程序设计》第二周学习总结

教材学习内容总结 在这一周里我通过课上与课下熟悉了VI编辑器的各种操作.gcc的有效应用,通过gcc来编译C语言程序!其主要分为4大步分为预处理.编译.汇编和链接. 也学会了Makefile的使用! 教材学习中的问题和解决过程 本周的出现的主要问题在于 GCC前不能加除Tab外任何东西,否则会影响到文件的编译! 代码调试中的问题和解决过程 代码暂时没有什么问题! 课后作业中的问题和解决过程 我在多次使用与试用!成功了解博客园 实验楼 网站! 其他(感悟.思考等,可选) 我们要对学校这门课有足够的

2014025660《嵌入式系统程序设计》第二周学习总结

本周学习过程中,学习运用gcc和gdb的编程,在实验过程中,编辑c文件,对文件类型进行转换,由于实验过程中,代码出现了错误,浪费了大量的时间查找代码的错误. 在Makefile的实验过程中,运用vi分别编辑hello.c文件hello.h,以及Makefile文件,最后运应用make -f makefile1显示 make hello是最新的.

2014025658《嵌入式系统程序设计》第二周学习总结

本周所学内容如下: 1.学会使用gcc编译器: 2.学会使用GDB调试器: 3.学会C程序的编写(包括系统调用和函数调用) 4.学会Makefile基本规则: 5.学会make命令的使用方法: 6.学会使用Makefile程序的编写. 7.使用gcc编译器编译C语言程序文件生成可执行文件的过程,是要经历四个相互关联的步骤:预处理.编译.汇编和链接. 8.gdb是GNU开源组织开发的一个强大的Linux下的程序调试工具,它主要完成:启动被调试程序,按照要求运行程序.让被调试的程序在指定的位置停住.

201405644 嵌入式程序设计第五周学习总结

嵌入式课程设计第五周学习总结 标准 I/O 编程 标准 I/O 提供流缓冲的目的是尽可能减少使用 read()和 write()等系统调用的数量.标准 I/O 提供了 3 种类型 的缓冲存储.全缓冲.行缓冲.不带缓冲. 打开文件 打开文件有三个标准函数,分别为:fopen().fdopen()和 freopen().其中 fopen()可以指定打开文件的路径和模式,fdopen()可以指定打开的文件描述符和模式,而 freopen() 除可指定打开的文件.模式外,还可指定特定的 I/O 流. f

嵌入式系统程序设计第三周实验总结

第三周是我相对于前两周收获的最多的一周,我开始认真听课,老师上课让跟着打的程序也能很好的跟上,不再说都不会不听了或者怎么样的 实验楼第二次做还是有点不太熟悉但是一些基本的东西都能操作 本次实验楼的程序结果如下

20145234黄斐《信息安全系统升级系统》第五周学习总结

教材内容概述 3.1 历史观点 X86 寻址方式经历三代: 1 DOS时代的平坦模式,不区分用户空间和内核空间,很不安全2 8086的分段模式3 IA32的带保护模式的平坦模式 3.2 程序编码 计算机系统使用了多种不同的抽象,对机器级编程来说,两种抽象尤为重要: 机器级程序的格式和行为,定义为"指令集体系结构"--"ISA" 机器级程序使用的存储器地址是虚拟地址 可见的处理器状态 程序计数器 指示将要执行的下一条指令在存储器中的位置 整数寄存器文件包含8个命名的位

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(con

20172311 2017-2018-2 《程序设计与数据结构》第五周学习总结

20172311 2017-2018-2 <程序设计与数据结构>第五周学习总结 教材学习内容总结 第五六章整体上来讲主要学习了条件判断与循环.小的知识点主要还有: 1.语句执行的顺序称为控制流,方法调用会引起控制流的改变. 2.相等性运算符由两个并列的等号组成,不要和只有一个等号的赋值运算符想混淆. 3.相等性运算符和关系运算符的优先级比算术运算符的优先级低. 4.在三种逻辑运算符中,逻辑非具有最高的优先级,其次是逻辑与,最后是逻辑或.逻辑运算符经常用于构成复杂的条件. 5.编写语句时适当的缩

20172308《程序设计与数据结构》第五周学习总结

20172308 2017-2018-2 <Java程序设计>第五周学习总结 教材学习内容总结 1.条件判断 a.if语句: 如果条件表达式的运算结果是true,则执行if中的语句,然后执行if后面的语句 b.if-else语句:如果条件成立执行第一条语句,不成立则执行else语句. c.switch语句:先计算表达式,与几个可能的case子句取值进行匹配,控制会跳转到第一条匹配的case子句执行.无匹配则执行default. 2.循环 a.while:先执行表达式计算,循环体执行完后再次计算