linux目录与进程

一.IO与文件目录管理

1.pread=lseek+read

pread读取以后不改变读位置

2.mmap映射:

/proc/${PID}/men 无法映射

3.IO的有效用户与实际用户

默认情况:实际用户与有效用户是一致的

有效用户 effice

权限用户

实际用户 real

执行用户

getuid()与geteuid()返回一个整数uid_t

4.目录相关函数

chdir 切换目录

mkdir 创建目录

rmdir 删除目录

unlink 删除文件

umask 设置文件权限屏蔽位

stat 文件目录状态

5.目录的遍历

方法一opendir系列函数

readdir seekdir dirfd 传递参数目录文件描述符

返回dirent结构,保含目录名,目录类型,空目录

方法二scandir

int scandir(const char*dirname,//目录名

struct dirent***namelist,//返回目录列表

int (*)(strudt dirent*),//回调函数,用于过滤目录。回调函数:通过函数指针调用的函数

//unll不过滤

int (*)(struct*,structdirent*),//用于目录排序

//NULL不排序)

scandir返回目录个数

二.进程

1.什么是进程

执行的程序:代码,资源(包括内存),CPU

进程有很多数据维护:进程状态/进程属性

所有进程属性采用结构体维护:树形的数据结构

ps 查看进程常见属性+a所有进程+aue有效进程

进程的状态:

top查看系统进程执行状况,类似windows任务管理器,空格刷新,Q退出

pstree查看进程树,在unix中为ptree

kill向进程发送信号kill  -s 信号 进程id

kill -l 显示进程能接受的所有信号

-1 表示所有进程

ulimited

2.创建进程

1.由代码加载到内存,分配CPU时间片

代码由独立的程序存在。

2.进程有关的创建函数,三个要素,代码,内存,CPU时间片

int system(const char*filename);建立独立进程,拥有独立的代码空间

等待新的进程执行执行完毕,system才返回(阻塞)。新进程的返回值与system的返回值有关系。

任务进程的返回值:不要超过255。一个字节。

system的返回值中8-15位存放返回码。即第二个字节中(Linux中宏WEXITSTATUS)。

案例:使用system调用一个程序。观察ID及阻塞。

   使用system调用ls   -l.ls-l home

popen:创建子进程,在父子进程之间建立一个管道,返回FILE*,用fileno可将之转化为一个文件描述符号。

案例:使用popen调用ls-l,并且建立一个管道读取输出。

exec系列函数

execl execlp

替换当前进程的代码空间中的代码数据

函数本身不创建新的进程。

int execl(const char*path,constchar*

第一个参数:替换的程序

第二个参数...:命令行

命令行格式:命令名 选项参数

命令行结尾必须是空字符串

案例:使用exec执行一个程序

体会execl的参数的命令行的格式,与excclp的区别(execl只认当前路径,execlp使用系统的搜索路径)

fork返回pit_t,创建进程。子进程复制父进程的代码和程序执行的位置。

在子进程不调用fork所以返回值=0,父子进程同时执行。

fork应用场景:使用fork实现多任务(UNIX系统本身不支持线程)

多任务的袦:1.进程2.线程3.信号4.异步5.进程池与线程池

4.理解进程

父子进程的关系:独立的二个进程,互为父子的关系。

父进程先结束,子进程依托根进程init:孤儿进程,孤儿进程没有任务危害。

子进程先结束,子进程会成为僵死进程。僵死进程不占用内存、CPU。但在进程任务树中占用一个节点。

僵死进程会造成进程名额资源浪费,所以要处理僵死进程。

僵死进程使用wait函数回收。是阻塞型。子进程结束时通常会发送一个信号SIGCHILD,父进程使用singal(int  sig,void(*)(int))向系统注册,只要sig信号发生,系统停止进程,并调用第二个参数函数fun。当函数执行完毕,继续原来的进程。该方式称为软中断。

处理步骤一,实现回收处理函数。步骤二,使用singnal绑定信号与处理函数。

5.父子进程的资源访问

5.1内存资源

子进程复制父进程的全局区、局部区内存,子进程的虚拟地址重新映射的,映射是独立的。

换句话说,子进程复制整个内存区域,但内存区域指向不同的物理空间。即:尽管复制,但内存独立,不能相互访问。内存资源是相互独立。

这就导致多进程之间的数据交换(通信)问题(IPC)。

映射内存:MAP_SHARED:映射到同一物理空间, MAP_PRIVATE:映射到不同的物理内存

5.2文件资源

父子进程之间,文件描述符号指向的是同一个文件内核对象

结论:进程的数据交换,基于二种方式:内存(有序/无序)与内存(有序/无序)

有序内存:消息队列

无序内存:共享内存

有序文件:管道文件(有名/匿名)与SOCKET文件

无序文件:映射

都是基于内核对象:文件,内存,队列。

补充:

每个进程维护自己的描述符列表。

1.exit(状态码)返回状态码,被系统得到,系统根据状态码进行日志记录。

返回值被调用者得到,system/wait,程序根据程序返回的状态码进行对应的处理

exit(状态码)=main函数中的return 状态码。

2.状态码状态码的第二个字节才是exit的返回值或者return返回值。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值