IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux环境编程Day05 -> 正文阅读

[系统运维]Linux环境编程Day05

目录操作

????int?mkdir(const?char?*pathname,?mode_t?mode);

????功能:创建目录

????mode:目录的权限,注意必须要有执行权限,否则无法进入

????int?rmdir(const?char?*pathname);

????功能:删除空目录

????int?chdir(const?char?*path);

????功能:进入某个目录,相当于cd命令

????char?*getcwd(char?*buf,?size_t?size);

????功能:获取当前工作目录,相当于pwd命令

????DIR?*opendir(const?char?*name);

????功能:打开目录文件,返回一个目录流

????name:选择要打开的目录

????struct?dirent?*readdir(DIR?*dirp);

????功能:从目录流中读取一条记录

????????struct?dirent?{

???????????????ino_t??????????d_ino;???????//?i节点号

???????????????off_t??????????d_off;???????//?下一条条目的偏移量

???????????????unsigned?short?d_reclen;????//?当前条目的长度

???????????????unsigned?char??d_type;??????//?文件类型

????????????????????????DT_BLK??????块设备文件

????????????????????????DT_CHR??????字符设备文件

????????????????????????DT_DIR??????目录文件

????????????????????????DT_FIFO?????管道文件

????????????????????????DT_LNK??????链接文件

????????????????????????DT_REG??????普通文件

????????????????????????DT_SOCK?????socket文件

????????????????????????DT_UNKNOWN??未知类型

???????????????char???????????d_name[256];?//?文件名

???????????};

????练习1:实现?ls?-l

????void?seekdir(DIR?*dirp,?long?loc);

????功能:设置目录流的位置指针,用于随机读取

????void?rewinddir(DIR?*dirp);

????功能:设置目录流的位置指针到开头

????long?telldir(DIR?*dirp);

????功能:获取当前目录流的位置指针位置

????

????作业:

????????实现?rm?-rf?功能(建议备份一下虚拟机文件,重点关注?.?..?两个目录的删除)

????

信号处理:

基本概念:

????1、中断

????????当进程接收到信息后中止当前正在执行的进程,转而去执行其他任务,等其他任务完成后再返回,这种执行模式叫做中断模式。中断分为硬件中断和软件中断。

????2、信号

????????是一种软件中断,由操作系统发出,进程接收后会执行相应的操作

????3、常见的信号

????????kill?-l?显示出所有的信号

????????SIGINT(2)???Ctrl+c??????终止

????????SIGQUIT(3)??Ctrl+\??????终止+core

????????SIGFPE(8)???除0?????????终止+core

????????SIGKILL(9)??终止信号?????终止

????????SIGSEGV(11)?非法访问内存?终止+core

????4、不可靠信号和可靠信号

????????建立在早期的信号处理机制上的信号(1~31),是不可靠信号

????????不支持排队,可能会丢失,同一个信号如果连续产生多次,进程可能只处理了一次。

????????建立在新的信号处理机制上的信号(34~64),是可靠信号

????????支持排队,不会丢失的

????5、信号来源

????????硬件异常:除零、无效的内存访问、未定义的指令、总线错误

????????软件异常:一般通过命令、函数产生的信号

????6、信号的处理方式

????????1、忽略

????????2、终止进程

????????3、终止并产生core文件

????????4、捕获并处理信号

???????????(在信号来之前,向内核注册一个信号函数,当信号发生后,系统会自动执行注册函数)

????

信号捕获:

????#include?<signal.h>

????typedef?void?(*sighandler_t)(int);

????功能:信号处理函数的格式,必须遵循

????sighandler_t?signal(int?signum,?sighandler_t?handler);

????功能:向内核注册一个绑定某个信号的信号处理函数

????signum:信号编号

????handler:函数指针

????????除了直接给函数名外,还可以给以下参数:

????????????SIG_IGN?忽略

????????????SIG_DFL?按默认方式处理

????返回值:

????????之前的信号处理方式????

????注意:

????????1、一个函数可以同时绑定多个信号

????????2、个别系统通过signal注册的函数只能执行一次,如果想要持续有效,可以在信号处理函数中再重新注册一次

????????3、信号处理完后会返回产生信号的代码处继续执行,如果我们捕获并处理了段错误、算术异常等信号,可能会产生死循环,因此正确地处理段错误、算术异常应该是备份数据并结束进程

????????4、子进程会继承父进程的信号处理方式

????练习2:测试一下?1-31?哪些信号不能被捕获处理

????????kill函数

????????9?19号信号不能被捕获也不能忽略

信号的发送:

????键盘:

????????Ctrl+c

????????Ctrl+\

????????Ctrl+z?暂停\挂起??命令fg唤醒

????错误:

????????除0

????????非法内存访问

????????硬件错误、总线错误

????命令:

????????kill?-信号?进程号

????????killall?-信号?进程名?

????????????可以向同名的多个进程发送同一个信号

????函数:

????????int?kill(pid_t?pid,?int?sig);

????????功能:向指定进程发送指定信号

????????pid:进程号

????????sig:信号编号

????????int?raise(int?sig);

????????功能:向进程自己发送信号sig

????????void?abort(void);

????????功能:向自己发送SIGABRT信号

????????unsigned?int?alarm(unsigned?int?seconds);

????????功能:让内核在seconds秒后向调用者发送SIGALRM信号

????????返回值:上一次alarm设置的剩余秒数

????????注意:如果再次调用时,会覆盖之前的设置,按照新的设置定时,因此不会产生多次闹钟信号


?

进程休眠信号:

????int?pause(void);

????功能:让调用者进入休眠状态,直到进程遇到信号

????返回值:要么一直休眠不返回,要么返回-1

????相当于没有时间限制的sleep

????unsigned?int?sleep(unsigned?int?seconds);

????功能:让调用者进入休眠指定的秒数,当遇到信号时会提前返回

????返回值:剩余没睡的秒数

信号集与信号阻塞:

????信号集:是一种数据类型?可以存储多个信号

????????????sigset_t?128位的数,每一位代表了一个信号

????相关函数:

????????int?sigemptyset(sigset_t?*set);

????????功能:清空信号集

????????int?sigfillset(sigset_t?*set);

????????功能:填满信号集

????????int?sigaddset(sigset_t?*set,?int?signum);

????????功能:向信号集中添加一个信号

????????int?sigdelset(sigset_t?*set,?int?signum);

????????功能:从信号集中删除一个信号

????????int?sigismember(const?sigset_t?*set,?int?signum);

????????功能:测试在信号集中是否存在某个信号

????????返回值:

????????????0???不存在

????????????1???存在

????????????-1??信号非法

????

????信号阻塞:

????????当程序执行一些特殊的操作时是不适合处理信号的,此时可以让内核先屏蔽信号,等操作执行结束后再继续发送处理信号

????????当信号发生时,内核会在其维护的信号表中为进程设置一个与该信号对应的标志位,该过程叫做递送

????????从信号产生到最终完成发送是有一个时间间隔,处于该间隔的信号状态叫做未决

????????信号阻塞就是让信号一直处于未决状态,暂停发送,当屏蔽解除后信号可以继续发送

????????每个进程都有一个信号集专门用于存储需要屏蔽的信号

????int?sigprocmask(int?how,?const?sigset_t?*set,?sigset_t?*oldset);

????功能:设置要屏蔽的信号,这些屏蔽的信号存储在进程内部的信号集中

????how:信号屏蔽的方式

????????SIG_BLOCK?????把set中的信号添加到要屏蔽的信号集中?

????????SIG_UNBLOCK???从信号集中删除set中的信号

????????SIG_SETMASK???用set替换原来的屏蔽信号集中的信号

????set:准备好的信号集?????????输入型参数

????oldset:获取旧的信号屏蔽集??输出型参数?不接可以给NULL

定时器:

????#include?<sys/time.h>

????int?getitimer(int?which,?struct?itimerval?*curr_value);

????功能:获取当前的定时方案

????which:选择一个计时器

????????ITIMER_REAL?????真实计时器??程序总的执行时间????????SIGALRM

????????ITIMER_VIRTUAL??虚拟计时器??用户态的执行时间????????SIGALRM

????????ITIMER_PROF?????实际计时器??用户态+内核态的执行时间?SIGPROF

????????真实计时器?=?实际计时器?+?休眠时间?+?切换时间

????

????int?setitimer(int?which,?const?struct?itimerval?*new_value,

????????????????????struct?itimerval?*old_value);

????功能:设置新的定时方案

?????????struct?itimerval?{

???????????????struct?timeval?it_interval;?//每次时钟信号产生的间隔时间

???????????????struct?timeval?it_value;????//第一次时钟信号产生的时间

???????????};

???????????struct?timeval?{

???????????????time_t??????tv_sec;?????????//?秒

???????????????suseconds_t?tv_usec;????????//?微秒?一百万分之一秒

???????????};

???????????注意:如果tv_usec的值超过一秒以上,方案会失效






?

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-09-07 11:12:00  更:2021-09-07 11:13:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 2:56:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码