随笔分类 -  UNIX高级编程

信号发送接收函数:sigqueue/sigaction
摘要:信号是一种古老的进程间通信方式,下面的例子利用sigqueue发送信号并附带数据;sigaction函数接受信号并且处理时接受数据。 1、sigqueue: 新的信号发送函数,比kill()函数传递了更多附加信息,但它只能向一个进程发送信号,针对实时信号(支持排队不会丢失),与sigaction配合 阅读全文

posted @ 2018-01-29 19:11 wsw_seu 阅读(340) 评论(0) 推荐(0)

信号之sigaction函数
摘要:可靠机制,不会恢复默认信号处理程序: 新的信号安装函数sigaction:sigaction函数用于改变进程收到的特定信号后的行为 int sigaction(int signum,const struct sigaction *act,const struct sigaction *old); / 阅读全文

posted @ 2018-01-27 20:21 wsw_seu 阅读(415) 评论(0) 推荐(0)

信号之信号集操作
摘要:1、信号在内核中的表示 执行信号的处理动作称为信号递达。信号从产生到递达状态之间的状态成为未决(pending)。进程可以选择阻塞某个信号。被阻塞的信号产生时将保持在未决状态。直到进程解除对此信号的阻塞,才可以执行递达动作。 如下图,进程任务结构(PCB)中包含:信号屏蔽字64位,linux中用si 阅读全文

posted @ 2018-01-27 19:35 wsw_seu 阅读(358) 评论(0) 推荐(0)

信号之可重入函数
摘要:为了增强程序的稳定性,在信号处理函数中应使用可重入函数。 可重入函数:指的是一个可以被多个任务调度的过程,任务在调度中不必担心数据是否出错。因为进程在收到信号后,就将跳转到信号处理程序去执行。如果信号处理程序中使用了不可重入函数,那么信号处理函数可能会修改原进程中不应被修改的数据,这样进程从信号处理 阅读全文

posted @ 2018-01-27 16:49 wsw_seu 阅读(245) 评论(0) 推荐(0)

信号的发送
摘要:1、可靠信号与不可靠信号 可靠信号都是实时信号,不可靠信号都是非实时信号。实时信号都支持排队,都是可靠信号。 不可靠信号的早期问题:1、UNIX进程每次处理信号后,将对信号响应设置为默认动作,而LINUX中再次发送不会重置默认动作,继续是handler.早期解决这个问题的方法是,在信号处理程序最后继 阅读全文

posted @ 2018-01-27 16:42 wsw_seu 阅读(208) 评论(0) 推荐(0)

守护进程详解以及start-stop-daemon命令
摘要:1、概念:守护进程是在后台运行的不受终端控制的进程,通常守护进程在系统启动时自动运行,守护进程的名称通常以d结尾,比如sshd、xinetd、crond等。 2、创建守护进程的步骤:a、调用fork(),创建新进程,它会是将来的守护进程;b、在父进程中调用exit(),保证子进程不是进程组组长;(进 阅读全文

posted @ 2018-01-22 19:53 wsw_seu 阅读(4612) 评论(0) 推荐(0)

信号基本概念
摘要:1、中断 :中断源--》中断屏蔽?--》保护现场--》中断处理--》恢复现场。中断个数固定。中断向量:保存固定个数中断处理程序入口地址 硬件中断(外部中断):外设 软件中断(内部中断):程序出错或程序调用指令 2、信号:异步事件响应,有某些错误条件发生,是在软件层次上对中断的模拟。 信号、中断相似点 阅读全文

posted @ 2018-01-22 19:52 wsw_seu 阅读(239) 评论(0) 推荐(0)

exec系列函数详解
摘要:execve替换进程映像(加载程序):execve系统调用,意味着代码段、数据段、堆栈段和PCB全部被替换。在UNIX中采用一种独特的方法,它将进程创建与加载一个新进程映像分离。这样的好处是有更多的余地对两种操作进行管理。当我们创建一个进程之后,通常将子进程替换成新的进程映像,这可以用exec系列的 阅读全文

posted @ 2018-01-17 22:38 wsw_seu 阅读(797) 评论(0) 推荐(0)

fork函数拓展
摘要:1、fork之后父子进程共享文件:文件引用计数的值改变,共享偏移。 在下面的例子中test.txt为parentchil。如果子进程没有睡眠,两个进程交叉执行,内容不可预测。 2、fork与vfork: 在fork还没有实现copy on write之前,UNIX设计者很关心fork之后立刻执行ex 阅读全文

posted @ 2018-01-16 23:00 wsw_seu 阅读(127) 评论(0) 推荐(0)

fork函数
摘要:复制进程映像:使用fork函数得到的子进程从父进程继承了整个进程的地址空间,包括:进程上下文、进程堆栈、内存信息、打开的文件描述符、信号控制设置、进程优先级、进程组号当前工作目录、根目录、资源限制、控制终端等。 子进程与父进程的区别在于:1、父进程设置的锁,子进程不继承(例如对于一个排他锁,父进程设 阅读全文

posted @ 2018-01-16 21:53 wsw_seu 阅读(205) 评论(0) 推荐(0)

进程与程序
摘要:一:概念 程序是一系列有序指令的集合(代码段+数据段=未初始化数据段bss、已初始化数据段)。程序是静态的 进程(代码段+数据段+堆栈段+PCB进程控制块):从用户角度看,进程是程序的一次动态执行过程从操作系统的内核来看,进程是操作系统分配的内存、CPU时间片等资源的基本单位进程是资源分配的最小单位 阅读全文

posted @ 2018-01-16 19:43 wsw_seu 阅读(341) 评论(0) 推荐(0)

fcntl函数用法——设置文件锁
摘要:fcntl函数。锁定文件,设置文件锁。设置获取文件锁:F_GETLK 、F_SETLK 、F_SETLKW文件锁结构,设置好用于fcntl函数的第三个参数。struct flock{ short l_type;//锁的类型 F_RDLCK,F_WRLCK(排他锁),F_UNLCK(清除锁) shor 阅读全文

posted @ 2018-01-15 20:32 wsw_seu 阅读(1477) 评论(0) 推荐(0)

fcntl函数用法——操纵文件描述符状态
摘要:fcntl函数:操纵文件描述符,改变已经打开的文件的属性int fcntl(int fd, int cmd, ... //arg );cmd选项:一、复制文件描述符:F_DUPFD二、更改设置文件描述标志:F_GETFD 、F_SETFD 文件描述符标志,是体现进程的文件描述符的状态.当前只定义了一 阅读全文

posted @ 2018-01-15 20:15 wsw_seu 阅读(653) 评论(0) 推荐(0)

fcntl函数用法——复制文件描述符
摘要:文件描述符复制和输出重定向dup() 用最小的文件描述符来复制,从0开始搜素。复制文件描述符后,最小文件描述符指向被复制描述符指向的文件。dup2(int oldfd,int newfd) 强制用newfd来复制oldfd close(1);dup(fd) == 》等价于dup2(fd,1)int 阅读全文

posted @ 2018-01-15 19:41 wsw_seu 阅读(466) 评论(0) 推荐(0)

文件共享
摘要:文件描述符指向文件表,一个进程默认打开1024个文件描述符。 文件表中保存了:文件状态标志(可读、可写、追加、同步、非阻塞等)、文件偏移量、refcnt(引用计数)、v结点指针(指向v结点表--v结点信息stat函数可以查看、i结点信息) 文件在磁盘块的位置: i结点信息. 若一个进程两次打开同一个 阅读全文

posted @ 2018-01-15 19:22 wsw_seu 阅读(161) 评论(0) 推荐(0)

stat函数
摘要:一、stat 函数,获取文件元数据 int stat(const char *path, struct stat *buf); int fstat(int fd, struct stat *buf); int lstat(const char *path, struct stat *buf); 二、 阅读全文

posted @ 2018-01-15 18:38 wsw_seu 阅读(5353) 评论(0) 推荐(0)

UNIX目录访问操作
摘要:1、目录访问相关函数: DIR* opendir (const char * path ); struct dirent* readdir(DIR *dirptr) ;参数是一个指向dirent 结构的指针。DIR是目录指针,读取一个目录,读取完毕返回一个空指针。 int closedir(DIR 阅读全文

posted @ 2018-01-13 21:44 wsw_seu 阅读(188) 评论(0) 推荐(0)

通过lseek产生空洞文件
摘要://off_t lseek(int fd,off_t offset, int base) 偏移量 搜索的起始位置(文件头(SEEK_SET),当前指针位置(SEEK_CUR),文件尾(SEEK_END))unistd.h#include <sys/types.h>#include <sys/stat 阅读全文

posted @ 2018-01-13 21:29 wsw_seu 阅读(238) 评论(0) 推荐(0)

lseek系统调用
摘要:文件的随机读写。目前为止,文件都是顺序访问。读写都是从当前文件的偏移位置开始,然后文件偏移值自动的增加到刚好超出读或者写结束的位置是它为下一次作好准备。在linux中有文件偏移。使得随机访问变得简单,只需将当前文件位置移植到有关位置,将迫使read()或write()函数发生在这一位置,除非文件被O 阅读全文

posted @ 2018-01-13 21:17 wsw_seu 阅读(491) 评论(0) 推荐(0)

minishell的实现
摘要:直接上各个模块的代码,注释都在文档代码中,非常详细,加上最后的Makefile文件完全可以自行运行看懂: main函数一个文件main.c setup信号安装部分在初始化模块中,分为两个部分init.h和init.c shell_loop的主循环在parse.h和parse.c这两个命令解析模块中: 阅读全文

posted @ 2018-01-13 21:06 wsw_seu 阅读(1414) 评论(0) 推荐(0)

导航