![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux系统编程小项目
yrx020307
进阶
展开
-
V9.0_增加信号的功能(信号的基本用法)
之前需学习过信号的基本用法;比如通过signal()和自定义的handle()来处理信号; 或者通过kill(pid,9);来杀死指定进程;本次实验的目的是:在使用自定义ls功能时,子进程使用popen实现ls后向共享内存发送子进程的IID号。父进程通过读取共享内存获取子进程的ID号并使用kill杀死子进程,然后父进程退出。父子进程的任务: 子进程实现“ls”,然后把子进程ID发送到共享内存 父进程从共享内存读子进程的ID并使用kill()杀死子进程 运行结果main.cio.cio..h原创 2023-06-04 11:38:28 · 131 阅读 · 0 评论 -
V8.0_增加共享内存功能
功能:使用自定义delete指令删除指定文件时:子进程执行完删除任务后会调用自定义函数(创建共享内存,向里面写入数据"had delete file"),接着exit();此时因wait()而处于阻塞状态的父进程解除阻塞,并调用自定义函数(打开共享内存读取数据)从共享内存读数据。原创 2023-06-01 12:15:18 · 87 阅读 · 0 评论 -
V7.0_增加消息队列功能
使用自定义copy功能时,子进程copy结束后向父进程发送消息(通过消息队列)然后exit;此时因wait()而处于阻塞态的父进程终于解除了阻塞并且从队列中读取到消息;原创 2023-05-30 18:06:35 · 67 阅读 · 0 评论 -
V6.0_增加fifo功能(在使用自定义write指令时,父进程创建fifo并以只读方式打开fifo会导致父进程被阻塞。子进程中读取终端输入的指令并记录在file中,输入QUIT结束文本编辑后,子进)
在使用自定义write指令时,父进程创建fifo并以只读方式打开fifo会导致父进程被阻塞。子进程中读取终端输入的指令并记录在file中,输入QUIT结束文本编辑后,子进程以只写的方式打开fifo,从而解除父进程的阻塞,父进程读取完fifo的消息后结束进程。运行结果:如图,(1)父进程通过(2)创建file并编辑完文本后,通过fifo 子进程向父进程发送消息(88888888),父进程可以接收到(88888888)原创 2023-05-30 16:25:36 · 78 阅读 · 0 评论 -
V5.0_增加pipe功能(使用自定义creat指令创建文件时,在子进程中创建新文件,创建完成后子进程通过pipe通知父进程“子进程的任务已完成”)
半双工:所以同一时刻要么只能读,要么只能写;原创 2023-05-30 14:16:19 · 74 阅读 · 0 评论 -
V4.0_增加popen的功能用于实现“ls”
(即:提过popen调用了ls指令后,popen把文件夹下的所有文件都列举出来了,也就是说popen的运行结果为:“file1 io.c io.h main.c run”),popen把运行结果传给fp,通过。//popen把运行结果传递给fp。程序会执行到int ls_file();执行程序,输入./run ls all。原创 2023-05-30 11:12:09 · 81 阅读 · 0 评论 -
V3.0_用exec族函数替代system()
二,验证“exec族函数允许成功后不会返回,也不会继续执行,而是结束子进程,且子进程的结束状态为0(相当于调用exit(0)结束子进程)”exec族函数允许成功后不会返回,也不会继续执行,而是结束子进程,且子进程的结束状态为0(相当于调用exit(0)结束子进程)(2)exec族函数中的函数调用失败时会设置error并返回-1,然后从源程序调用点接着往下执行。父进程在等待子进程结束,如果子进程结束了,会打印结束状态;创建子进程后,在子进程中调用exec组函数处理事情;子进程结束状态为0;原创 2023-05-29 21:38:42 · 646 阅读 · 0 评论 -
V2.0-在记事本功能上添加fork和wait
但如果我们对这个子进程是如何死掉毫不在意,只想把这个僵尸进程消灭掉,(事实上绝大多数情况下,我们都会这样想),我们就可以设定这个参数为NULL,就像下面这样:pid = wait(NULL);wait()要与fork()配套出现,如果在使用fork()之前调用wait(),wait()的返回值则为-1,正常情况下wait()的返回值为子进程的PID.如果成功,wait会返回被收集的子进程的进程ID,如果调用进程没有子进程,调用就会失败,此时wait返回-1,同时errno被置为ECHILD。原创 2023-05-29 15:56:30 · 684 阅读 · 0 评论 -
基于open,read,write,lseek,system实现的记事本
(2)向文件写入数据 ./a.out write file1(注意执行这个命令后会进入死循环不断读取键盘输入的字符,直到键盘输入QUIT才退出)(5)拷贝文件 ./a.out copy file1 file2(这个功能没偷懒,是依赖lseek实现的)(3)展示文件的内容 ./a.out display file1(原理是调用system())(4)删除文件 ./a.out delete file1(原理是调用system())(1)创建文件 ./a.out creat file1。原创 2023-05-29 14:12:56 · 84 阅读 · 0 评论