linux学习读书笔记上传版.docx
- 文档编号:17474850
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:11
- 大小:757.83KB
linux学习读书笔记上传版.docx
《linux学习读书笔记上传版.docx》由会员分享,可在线阅读,更多相关《linux学习读书笔记上传版.docx(11页珍藏版)》请在冰点文库上搜索。
linux学习读书笔记上传版
第2天(文件编程)-3(时间编程)
时间类型:
1.标准时间;2.日历时间
时间获取:
time_ttime()例子(如何获取1970年某时间到现在的秒数)例子用、*typedeflongtime_t*/
时间转化:
见图3-7
时间保存:
见图3-8
时间获取:
例子见图3-9
//cdisgcctime.c–otime1timedata怎么确定时区,安装系统的时候选择了时区
时间显示:
1.char*asctime()将tm格式时间转化为支付串
2.char*ctime()将日历时间转化为本地时间的字符串形式
时间显示例子图3-10
//gcctime.c–otime2./time2
获取时间:
intgettimefday()从凌晨到现在的秒数
例子见图3-11fution()函数运行的时间
//#include
延时执行:
unsignedintsleep(second秒)
Voidusleep(longusec微妙)
第3天(进程控制)-1(进程控制原理)
Linux进程控制程序设计
昨天;系统调用和库函数调用的区别,系统调用依赖Linux
1、进程控制理论基础(操作系统原理)、
进程定义:
与程序区别,程序是静态的
特点:
动态性,并发性
状态:
状态图见图4-1:
就绪态----执行态----阻塞态
进程ID(PID):
标识进程的唯一数字
父进程ID(PPID):
、
启动进程的用户ID(UID)
进程互斥:
只允许一个进程访问的临界资源
临界区
进程同步;一组并发进程按一定的顺序执行过程称为i进程的同步。
进程调度:
按一定算法,选择一个进程来给CPU运行
调度方式:
1.抢占式2.非抢占式
调度算法:
1、先来先服务2、短进程优先3、优先级4、时间片轮
死锁:
多个进程因竞争而使得大家都无法调用CPU
第3天(进程控制)-2(进程控制程序设计)
进程控制编程
获取ID:
pid_tgetpid(void)获取本进程IDpid_tgetppid(viod)获取父进程例子图5-1
//gccgetpid.c
进程创建fork:
pid_fork(void)产生子进程例子图5-2
图5-3count显示两次,父进程一次,子进程一次,他们共享下面的代码(count=1;count=1)数据不共享
进程创建vfork,,,与父进程共享数据段,子进程先运行;fork拷贝父进程的数据段,不确定谁先运行
Vfork例子图5-4:
count被打印两次,子进程count=1;父进程count=2;
exec函数族,不会创建新的进程
intexecl(constchar*path,constchar*arg1,….)
path:
被执行程序名(含完整路径);arg1—argn:
被执行程序所需的命令行参数,含程序名
例子见图5-5
Intexeclp()无需路径例子见图5-6
Intexecv();argv[]字符串数组例子见图5-7
Intsystem()产生子进程,由子进程执行
进程等待:
pid_twait(nt*status)阻塞该进程例子见图5—8
第4天(进程通讯)-1(进程间通讯概述)、
1、进程间通信:
数据传输、资源共享、通知事件、进程控制
2、发展:
UNIX进程通信—
3、Posix可移植操作系统接口,,利用在移植中
4、Syetemv:
UNIX中的一个分区
5、分类:
1、管道2、信号3、信号队列4、共享内存5信号量6套接字
第4天(进程通讯)-2(管道通讯)
1、管道通信:
单向的、先进先出
无名管道(用于父子进程):
intpipe(intfiledis[2]);filedis[0]用于读管道;filedis[1]写管道
有名管道(任意进程):
创建intmkfifo(constchar*pathname文件名,mode_tmode属性)
操作:
图6-4
关闭管道close
管道通信例子见图6-1
//fd为整型
Pipe_rw.c例子图6-2;6-3
Fifo_write.c图6-5和fifo_read.c图6-6利用fifo通信
第4天(进程通讯)-3(信号通讯)
1、信号通信
用函数产生信号killed命令产生
信号类型见图6-7
常见信号见图6-7、
信号处理:
1、忽略此信号(sigkill和sigstop不能忽略)
2、执行用户希望的动作
3、执行系统默认动作(大多数默认是终止该信号)intkill()
信号发送:
kill可以给我i自己发,raise只能给自身发intraise()
Alarm函数:
在未来一个时间(在参数中设置)产生sigalarm
Pause使进程等待知道收到信号
信号处理:
signal函数void(*signal(intsigno,void(*func)(int)))(int)
如何理解上段程序例子见图6-9
//Mysignalkillsigstoptsskill-sihavegetafuck
第4天(进程通讯)-4(共享内存通讯)
1、共享内存:
把物理内存共享出一部分,供进程写入
共享内存步骤:
1、创建shmget2/映射共享内存
创建intshmget()
*映射intshmat()参数:
标识符、flag
接触映射intshmdt()例子见图7-1
第5天(进程通讯)-1(消息队列)
1、进程间通信程序设计:
消息队列(管道只能传递无格式队列,消息队列可以克服这个问题)
发展:
消息队列就是=一个消息的链表,具有特定格式
分类:
POSIX消息队列;V消息队列
持续性:
重启内核才能消除
键值:
消息队列对应唯一的键值
读键值key_tftok()返回文件名对应键值(文件名,项目名不为零即可)
打开/创建:
intmsgget(键值,标志位)返回值键值描绘
IPC_CREAT创建新的消息队列
IPC_EXCL与IPC_CREAT一同使用,表示如果要创建的消息队列已经存在返回错误
IPC_NOWAIT读写消息队列要求无法得到满足时,不阻塞
什么情况可以建立新的消息队列:
1、假如没有与键值相对应消息队列
2、key参数为IPC_PRIVATE
创建消息队列例子:
例子见图8-1
发送消息:
intmsgsnd(intmsqid,structmsgbuf....)图8-2
消息格式:
structmsgbuf{longmtype;
Charmtext[1]]}
接收消息:
intmsgtcv()从msqid代表中读取一个msgtyp类型消息例子见图8-3
实例图8-4(min32~40)
第5天(进程通讯)-2(信号量)
1、信息量:
又名信号灯。
主要用途是保护临界资源。
进程根据他判断是否访问共享资源(忙标志位只有0和1)
2、创建/打开:
intsemget(键值,nsems制定打开的信号灯数目,)
3、操作:
intsemop(intsemid信号量集的ID,structsembuf*sops是一个操作数组,表明要进行什么操作,unsignednsopssops所指向数组的元素数量)
4、操作:
structsembuf{}(min13~)
5、
线程的优点:
比进程节俭(进程需要地理地址空间,进程开销大其30倍)
多线程:
遵循POSIX
例子
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 学习 读书笔记 上传
![提示](https://static.bingdoc.com/images/bang_tan.gif)