狂自私

导航

2018年4月5日 #

SIGCHLD信号

摘要: SIGCHLD的产生条件 子进程终止时 子进程接收到SIGSTOP信号停止时 子进程处在停止态,接受到SIGCONT后唤醒时 也就是说:子进程的运行状态发生变化就会发送SIGCHILD信号;这里的意思时,子进程比较依恋父母,自己发生变化就要给父母说一下。 借助SIGCHLD信号回收子进程 子进程结束运行,其父进程会收到SIGCHLD信号。该信号的默认处理动作是忽略。可以捕捉该信号,在捕捉函数中完成... 阅读全文

posted @ 2018-04-05 20:47 狂自私 阅读(1105) 评论(0) 推荐(0) 编辑

竟态条件(时序竟态)初窥

摘要: 先不管标题,我们先实现一个函数:my_sleep();但在这之前我们需要熟悉一个新系统调用函数:pause(); pause函数 调用该函数可以造成进程主动挂起,等待信号唤醒。调用该系统调用的进程将处于阻塞状态(主动放弃cpu) 直到有信号递达将其唤醒。 int pause(void);失败返回值:-1 并设置errno为EINTR 返回值: ① 如果信号的默认处理... 阅读全文

posted @ 2018-04-05 20:46 狂自私 阅读(719) 评论(0) 推荐(0) 编辑

简洁的实现ls-l命令

摘要: 现在我们来简洁的实现命令:了解一下相关知识: 我们使用掩码可以很明确的得出文件的每一种信息。关于掩码,上图中的S_IRUSR等均为掩码。我们来看看函数getpwuid,原型:struct passwd *getpwuid(uid_t uid);头文件:#include 。getpwuid()用来逐一搜索参数uid 指定的用户识别码, 找到时便将该用户的数据以结构体的形式返回。该函数的返回值是一... 阅读全文

posted @ 2018-04-05 20:46 狂自私 阅读(510) 评论(0) 推荐(0) 编辑

函数mmap()的使用

摘要: 函数mmap是linux的一个系统函数。如下: 函数原型:void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset); 配套函数原型:int munmap(void *addr, size_t length); 头文件:#include 返回值:成功返回创建的映射区的首地址;失败返回宏MAP_FA... 阅读全文

posted @ 2018-04-05 20:46 狂自私 阅读(5835) 评论(0) 推荐(0) 编辑

利用目录函数(opendir,readdir,closedir)查找文件个数

摘要: 如何知道一个目录下的所有文件个数呢?或许可以用tree来学(zhuang)习(bi)的同时知道文件个数。Linux系统io函数为我们提供了目录操作函数,其中有一个比较重要(实际上有三个,因为它们经常配套使用。)。我们可以利用它来递归的读取目录,从而知道指定目录下有多少个文件。下面我来介绍一下: opendir函数: 函数原型:DIR *opendir(const char *name)... 阅读全文

posted @ 2018-04-05 20:45 狂自私 阅读(2243) 评论(0) 推荐(0) 编辑

使用exec函数将当前的信息输入到文件中

摘要: 先来看看exec函数: exec函数族 fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。 将当前进程的.text、.data替换为所要加载的... 阅读全文

posted @ 2018-04-05 20:44 狂自私 阅读(906) 评论(0) 推荐(0) 编辑

实现一个简单的shell

摘要: 使用已学习的各种C函数实现一个简单的交互式Shell,要求:1、给出提示符,让用户输入一行命令,识别程序名和参数并调用适当的exec函数执行程序,待执行完成后再次给出提示符。2、该程序可识别和处理以下符号:1) 简单的标准输入输出重定向:仿照例 "父子进程ls | wc -l",先dup2然后exec。2) 管道(|):Shell进程先调用pipe创建管道,然后fork出两个子进程。一个子进程关闭... 阅读全文

posted @ 2018-04-05 20:44 狂自私 阅读(1777) 评论(0) 推荐(1) 编辑

一秒钟,你的电脑能数多少数?

摘要: 如题,让电脑数数很简单,一个循环就能够搞定,但是如何是在一秒内完成?我们需要一个定时的东西→定时器函数:alarm(); 原型:unsigned int alarm(unsigned int seconds); 返回值:0或者剩下的秒数;无失败返回,即,几乎不出错。 常用于定时(废话),取消前一个定时器。定时器叼啊,自然定时法不管进程是个啥情况(僵尸,就绪,运行,挂起,阻塞,暂停,终止)都计时。 ... 阅读全文

posted @ 2018-04-05 20:42 狂自私 阅读(608) 评论(0) 推荐(0) 编辑

守护进程

摘要: 守护进程 Daemon(精灵)进程,是Linux中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。一般采用以d结尾的名字。 Linux后台的一些系统服务进程,没有控制终端,不能直接和用户交互。不受用户登录、注销的影响,一直在运行着,他们都是守护进程。如:预读入缓输出机制的实现;ftp服务器;nfs服务器等。 创建守护进程,最关键的一步是调用set... 阅读全文

posted @ 2018-04-05 20:42 狂自私 阅读(299) 评论(0) 推荐(0) 编辑

使用sigaction函数

摘要: sigaction函数 修改信号处理动作(通常在Linux用其来注册一个信号的捕捉函数) int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); 成功:0;失败:-1,设置errno 参数: act:传入参数,新的处理方式。oldact:传出参数,旧的处理方式。 stru... 阅读全文

posted @ 2018-04-05 20:42 狂自私 阅读(2316) 评论(0) 推荐(0) 编辑