2014025688《嵌入式程序设计》第五周学习总结

一、标准I/O编程

标准I/O提供流缓冲的目的是尽可能减少使用read()和write()等系统调用的的数量。标准I/O提供了3中类型的缓冲存储。

1.全缓冲:在这种情况下,当填满标准I/O缓存后才进行实际I/O操作。

2.行缓冲:在这种情况下,当在输入和输出中遇到行结束符时,标准I/O库执行I/O操作。标准输入和标准输出就是使用行缓冲的典型例子。

3.不带缓冲:标准I/O库不对字符进行缓冲。如果用标准I/O函数写若干字符到不带缓冲的流中,则相当于用系统调用write()函数将这些字符全写到被打开的文件上。标准出错stderr通常是不带缓冲的,这就使得出错信息可以尽快显示出来。

二、Linux进程

1.查进程

ps命令查找与进程相关的PID号:

ps a 显示现行终端机下的所有程序,包括其他用户的程序。
    ps -A 显示所有程序。
    ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
    ps -e 此参数的效果和指定"A"参数相同。
    ps e 列出程序时,显示每个程序所使用的环境变量。
    ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
    ps -H 显示树状结构,表示程序间的相互关系。
    ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
    ps s 采用程序信号的格式显示程序状况。
    ps S 列出程序时,包括已中断的子程序资料。
    ps -t<终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。
    ps u 以用户为主的格式来显示程序状况。
    ps x 显示所有程序,不以终端机来区分。

2.杀进程

使用kill命令结束进程:kill xxx

   常用:kill -9 324
   Linux下还提供了一个killall命令,可以直接使用进程的名字而不是进程标识号,例如:# killall -9 NAME

进程函数fork()

fork函数是程序中的分叉函数。
返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程标记;
否则返回-1。
作用:正在执行的一个进程进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程。
函数原型:pid_t fork( void);

exec族函数

exec函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容。exec函数族的函数执行成功后不会返回,因为调用进程的实体被新的内容取代,只留下进程ID等一些表面上的信息仍保持原样,只有调用失败了才会返回一个-1,从原程序的调用点接着往下执行。

总结遇到的错误:
数组argv和envp忘记用NULL结束,程序会报错误。

exit()函数和_exit()函数

exit()就是退出程序,exit(0)表示正常退出,其他表示非正常退出exit(1)
_exit()用法跟上述一样,但是它们还是有细微的差别的。
exit与_exit的区别
_exit():直接使进程停止运行,清除其使用的内存空间。
exit():在执行退出之前加了若干道工序,在停止进行。
exit()函数在调用exit系统调用之前要检查文件,需要清理I/O缓冲。

waitpid()函数

函数作用:
waitpid()会暂时停止目前进程的执行,直到有信号来到或子进程结束。
函数原型:pid_t waitpid(pid_t pid,int * status,int options)
pid是一个标识符如果pid为-1就等待任何一个子进程,如果pid>0
就是等待pid指定的那个进程结束。
options是一个或多个标致符按位“或”的结果。可以用WNOHANG返回
status是一个int类型指针。

时间: 2024-10-13 18:17:31

2014025688《嵌入式程序设计》第五周学习总结的相关文章

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

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

2014025689 嵌入式程序设计 第七周学习总结

嵌入式程序设计 第七周   第七周课程主要学习了有名管道和消息队列的传输和接收.   一丶有名管道   有名管道和无名管道的区别: 1.  有名管道定义:可以使互不相关的两个进程实现彼此通信的管道就是有名管道.有名管道可以通过路径名来指出,并且在文件系统中是可见的.在建立了管道之后,两个进程就可以把它当作普通文件一样进行读写操作,使用非常方便.不过值得注意的是,FIFO 是严格地遵循先进先出规则的,对管道及 FIFO 的读总是从开始处返回数据,对它们的写则把数据添加到末尾,它们不支持如 lsee

2014025644 嵌入式程序设计 第七周学习总结

嵌入式程序设计 第七周 有名管道 有名管道和无名管道的区别 (1) 无名管道:管道是半双工的,数据只能向一个方向流动:需要双方通信时,需要建立起两个管道:只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程). 单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中. 数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出.写入的内容每次都添加在管道缓冲区的末尾,并且每次都是

2014025637《嵌入式程序设计》第一周学习总结

学习总结 1.安装软件以及初识linux总结 <嵌入式程序设计>这门课程开了一周,我从没有安装软件到能够写一个简单的程序,这其中有很多的问题,刚开始安装软件时安装软件有很多的错误,以至于重装了一次系统,由于种种原因上课时没能跟上老师的步伐进行复习,好在在课下的时候找时间都进行了练习,复习了一下以前的操作符命令. 2.上课编程作业 利用gcc打印hello word vi命令是新建一个文件 ls命令是显示列表 3.实验楼作业 在linux中,最重要的是命令,包含了两个过程,就是输入和输出 输入就

2014025689《嵌入式程序设计》第一周学习总结

这一周主要学习了vim的使用和Linux的一些基本的操作,并在电脑上操作 一.vim的基本指令 vi的使用 创建目录的命令:mrkdir+目录 将一个目录下的文件拷贝到另一个目录下:cp /原目录 /新目录 进入目录:cd+目录 设定行号命令:set number 移至指定行:行号G 删除行:dd 复制该行:将光标移到该行yy 粘贴:p 将光标移到最后一行行首:G或者shift+g 撤销:u 光标移动到指定字符:/+指定字符 gcc编译的操作方法 gcc test.c -o test gcc -

2014025654 《嵌入式程序设计》第一周学习总结

本周学习内容 通过本次的实验和第一周的课程,让我对linux有了基本我了解.在上课的过程中和实验时,使我对linux有了非常大的兴趣.操作系统的出现解决了电脑上程序上的问题,在最开始的操作系统,它是非常有局限性的,浪费时间,浪费了精力.UNIX的出现是非常必要的,UNIX 实现了 TCP/IP 协议栈,成为了早期工作站的操作系统的一个流行选择.在大学校园里,它成为了主流,但随之而来的是价格的提高.昂贵的价格让许多计算机专业的人感到苦恼.于是,LINUX 的出现显得格外珍贵.LINUX支持Wind

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

教材学习内容总结 通过本周的学习,我学会使用gcc编译器.使用GDB调试器和C程序的编写. 通过做实验楼的实验,我对基本操作有了一定的实践和了解. 一开始总是打错,但后来慢慢改正了. 在这遇到了问题,没有某个文件或目录 改正后输出了正确结果 第二个实验是练习Makefile,通过这个实验,我学会Makefile基本规则,熟悉使用make命令的方法并学会使用Makefile程序的编写. 一开始创建目录时出现了错误,显示权限不够,后来加了sudo,问题得到了解决. 因为代码打错出现了错误,及时改正后

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

20165301 2017-2018-2 《Java程序设计》第五周学习总结

20165301 2017-2018-2 <Java程序设计>第五周学习总结 教材学习内容总结 第七章:内部类与异常类 内部类 在一个类中定义另一个类 非内部类不可以是static类 匿名类 一个子类去掉类声明后的类体 用bank的一个子类(匿名类)创建对象 new Bank(){ 匿名类的类体 } 和接口有关的匿名类 new Computable(){ 实现接口的匿名类的类体 } 异常类 异常对象可以调用如下方法得到或输出有关异常信息 public String getMessage();

20165115 2017-2018-2 《Java程序设计》第五周学习总结

20165115 2017-2018-2 <Java程序设计>第五周学习总结 教材学习内容总结 第七章学习的内容是内部类与异常类.其中,异常类在解决错误情况的处理上就有很大的作用.特别是在实际操作一些大的程序时,如果不进行边界检测,让程序对可能出现的错误情况做出反应,就很可能会导致实际运行时出现各种各样的问题.我对第七章的内容稍微总结了一下: try-catch语句 Java使用try-catch语句来对异常情况进行处理.其中,try部分放入可能出现的异常情况,当其中某个方法调用发生异常后,t