【Linux环境高级编程】Linux环境高级编程作业

00. 目录


在这里插入图片描述

01. 第1章_shell脚本

02. 第2章 系统调用和文件IO作业

2.1 实现who命令(选做)

deng@local:~/桌面$ who
deng     tty2         2023-08-29 08:44 (tty2)
deng     pts/2        2023-08-29 09:25 (10.36.104.58)
deng     pts/3        2023-08-29 14:17 (10.36.104.58)
deng     pts/4        2023-08-29 14:39 (10.36.104.58)
deng@local:~/桌面$ 

2.2 实现ls -l 命令(选做)

deng@local:~$ ls -l
总计 68996
drwxr-xr-x  2 deng deng     4096  718 00:56 公共的
drwxr-xr-x  2 deng deng     4096  718 00:56 模板
drwxr-xr-x  2 deng deng     4096  718 00:56 视频
drwxr-xr-x  2 deng deng     4096  718 00:56 图片
drwxr-xr-x  2 deng deng     4096  718 00:56 文档
drwxr-xr-x  2 deng deng     4096  718 00:56 下载
drwxr-xr-x  2 deng deng     4096  718 00:56 音乐
drwxr-xr-x  2 deng deng     4096  718 00:56 桌面
drwxrwxr-x  4 deng deng     4096  823 17:20 arm
-rwxrw-r--  1 deng deng 61548598 1010  2013 arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz
drwxrwxr-x  6 deng deng     4096  823 14:59 code
drwxrwxr-x  4 deng deng     4096  825 11:28 kernel_code
drwxrwxr-x 18 deng deng     4096  81 16:23 openssl-1.1.1d
-rwxrwxr-x  1 deng deng  8845861  81 16:19 openssl-1.1.1d.tar.gz
drwx------  3 deng deng     4096  718 00:57 snap
drwxrwxr-x  2 deng deng     4096  829 09:56 test
drwxr-xr-x  3 deng deng     4096  58  2016 vim_configure
-rwxrw-r--  1 deng deng   189503  415  2017 vim_configure.tar.bz2
deng@local:~$ 

03. 第3章_进程

3.1 实现system函数
题目:实现system函数
提示:

子进程调用exec启动/bin/sh -c string来执行参数string字符串所代表的命令
父进程等待子进程退出

程序流程图
在这里插入图片描述

3.2 多进程编程(选做)

父进程fork三个子进程:

  • 一个调用ps命令
  • 一个调用自定义应用程序
  • 一个调用会出现段错误的程序

父进程回收三个子进程(waitpid),并且打印三个子进程的退出状态

04. 第4章_信号

05. 第5章_管道、命令管道

5.1 实现以下命令

deng@local:~/code/3linux/5pipe$ ps -A | grep bash
   2606 pts/0    00:00:00 bash
   2696 pts/1    00:00:00 bash
   2806 pts/2    00:00:00 bash
deng@local:~/code/3linux/5pipe$

思路分析:

//创建管道  子进程读管道 父进程写管道
pipe

父进程:

dup2(fd[1], 1);
执行 ps -A   execlp


子进程:
dup2(fd[0], 0);
执行grep bash  execlp

5.2 使用多进程的方式改写聊天程序(有名管道)

16mkfifo_room

思路分析
在这里插入图片描述

06. 第6章_消息队列

消息队列多人聊天程序

在这里插入图片描述

07. 第7章_共享内存

7.1 创建一个守护进程,在后台周期性执行任务

08. 第8章_线程

09. 第9章_多任务互斥与同步

9.1 写一个死锁程序

提示: 有两个互斥锁 mutex1 mutex2

线程A: 申请加锁mutex1 再申请加锁mutex2
线程B: 申请加锁mutex2 再申请加锁mutex1

9.2 C语言定时器 setitimer
setitimer函数用于设置定时器,并指定定时器到期后所产生的信号行为。其函数原型如下:

#include <sys/time.h>

int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value);

该函数接受三个参数:

which:指定定时器类型,可以是以下两个值之一:

ITIMER_REAL:真实时间定时器,使用系统实时时间,到期后将发送SIGALRM信号。
ITIMER_VIRTUAL:虚拟时间定时器,使用进程运行时间,到期后将发送SIGVTALRM信号。
ITIMER_PROF:以两者之和作为时间基准,到期后将发送SIGPROF信号。
new_value:一个指向struct itimerval结构体的指针,用于指定新的定时器值(启动时间和间隔时间)。

it_value字段表示定时器首次到期的时间间隔。
it_interval字段表示定时器循环触发的时间间隔。
old_value:一个指向struct itimerval结构体的指针,用于获取旧的定时器值,即之前设置的定时器值。如果不需要获取旧的定时器值,则可以传入NULL。

调用setitimer函数后,会根据new_value所指定的定时器值来启动或修改定时器。到期后,系统会发送相应的信号,并根据信号处理机制执行相应的操作。可以使用signal函数或sigaction函数来捕获并处理定时器到期产生的信号。

以下是一个示例代码,演示如何使用setitimer函数设置一个定时器:

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <signal.h>

void timer_handler(int signum) {
    printf("Timer expired!\n");
}

int main() {
    struct itimerval timer;
    
    // 设置首次触发定时器为1秒后,定时器到期后每10秒触发一次
    timer.it_interval.tv_sec = 10;
    timer.it_interval.tv_usec = 0;
    timer.it_value.tv_sec = 1;
    timer.it_value.tv_usec = 0;

    // 注册信号处理函数
    signal(SIGALRM, timer_handler);

    // 启动定时器
    setitimer(ITIMER_REAL, &timer, NULL);

    // 死循环,等待定时器到期
    while (1);

    return 0;
}

上述代码中,我们设置了一个定时器,其初次到期时间为1秒后,之后每10秒触发一次。当定时器到期时,会触发SIGALRM信号,并通过注册的信号处理函数timer_handler进行处理。在示例代码中,我们只是简单地打印一条信息并没有做其他处理。

9.3 实现生产者和消费者(基于信号量)
sem1信号量初始化为10 sem2信号量初始化为0
在这里插入图片描述

10.

11.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值