linux学习读书笔记333上传.docx

上传人:b****4 文档编号:6798163 上传时间:2023-05-10 格式:DOCX 页数:11 大小:565.03KB
下载 相关 举报
linux学习读书笔记333上传.docx_第1页
第1页 / 共11页
linux学习读书笔记333上传.docx_第2页
第2页 / 共11页
linux学习读书笔记333上传.docx_第3页
第3页 / 共11页
linux学习读书笔记333上传.docx_第4页
第4页 / 共11页
linux学习读书笔记333上传.docx_第5页
第5页 / 共11页
linux学习读书笔记333上传.docx_第6页
第6页 / 共11页
linux学习读书笔记333上传.docx_第7页
第7页 / 共11页
linux学习读书笔记333上传.docx_第8页
第8页 / 共11页
linux学习读书笔记333上传.docx_第9页
第9页 / 共11页
linux学习读书笔记333上传.docx_第10页
第10页 / 共11页
linux学习读书笔记333上传.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

linux学习读书笔记333上传.docx

《linux学习读书笔记333上传.docx》由会员分享,可在线阅读,更多相关《linux学习读书笔记333上传.docx(11页珍藏版)》请在冰点文库上搜索。

linux学习读书笔记333上传.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2