linux学习读书笔记333上传.docx
- 文档编号:11588922
- 上传时间:2023-03-19
- 格式:DOCX
- 页数:11
- 大小:565.03KB
linux学习读书笔记333上传.docx
《linux学习读书笔记333上传.docx》由会员分享,可在线阅读,更多相关《linux学习读书笔记333上传.docx(11页珍藏版)》请在冰豆网上搜索。
linux学习读书笔记333上传
第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
例子第1天(编程基础)-3(makefile工程管理)
wen
GNUmake构建和管理自己的文件工程
统一管理
需要一个Makefile的文件
Make文件规则
Makefile例子,见图1-1
Hello:
main.ofunc1.ofunc2.0
Makefile术语:
targets:
prerequisitescommanf目标依赖命令
例子:
main.o:
main.cgcc-cmain.c
文件名:
make在默认情况会自动寻找makefile文件
伪目标:
没有任何依赖只有动作的目标
变量:
添加变量两种方法,例子图1-2
默认变量:
见图1-3
杂项:
1注释#
//makevimakefilermhello}
第2天(文件编程)-1(系统调用方式访问文件)系统调用:
1、创建intcreat,filename
Filename
Mode
可执行1
可写2
可读4
例子:
见图2-1程序
//gccfile_creat–ofile_creat
文件描述所有文件都对应一个文件描述符
可执行1
可写2
可读4
系统调用—打开:
pathname:
要打开的文件名
Flags打开标志:
例如:
O_CREATE
实例分析:
见图2-2程序
//rmfileopen.cgccopen.c
//分析程序
系统调用关闭:
fd:
文件描述符
系统调用读intread(intfd,constvoid*buf,)
系统调用写intwrite()
系统调用定位intiseek(intfd,offset_toffset.intwhence)
{}
Seek_set开头
Seek_cur中间
Seek_end末尾哦
系统调用访问判断:
intaccess()
例子file_cp.c
第2天(文件编程)-2(库函数访问文件)
Contents
库函数;独立于平台
库函数-创建和打开:
FILE*fopen(constchar)
Filename:
打开的文件名(包含路劲
Mode:
打开模式
库函数-打开模式
库函数创建和打开,见图3-1
库函数-读:
size_tfread(void*ptr,size_tsize,)
库函数-写:
size_tfwrite()
库函数-读字符:
intfgetc(FILE*stream)从指定文件读一个字符)例子图3-2
库函数—写字符:
intfputc(intc,FILE*stream)向指定文件写一个字符例子图3-3
库函数-格式化读:
fscanf(FILE*stream,char*format[,argument])格式化输入例子图3-4
库函数-格式化写:
fscanf(FILE*stream,char*format[,argument])格式化输入例子图3-5
%s字符串%d整型
库函数-定位:
intfseek(FILE*stream)
路径获取:
char*getcwd(char)例子图3-6
创建目录:
intmkdir()
第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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 学习 读书笔记 333 上传