unix环境变量高级编程
leotoneo
ls all | grep only
https://github.com/leotoneo
展开
-
Linux信号实践(1) --Linux信号编程概述
中断 中断是系统对于异步事件的响应, 进程执行代码的过程中可以随时被打断,然后去执行异常处理程序; 计算机系统的中断场景:中断源发出中断信号 -> CPU判断中断是否屏蔽屏蔽以及保护现场 -> CPU(查询中断向量表, 找到中断服务程序的入口地址)执行中断处理程序 ->(处理完中断之后) ->恢复现场,继续执行原来的任务 中断分类硬件中断(外部中转载 2015-10-16 17:38:54 · 319 阅读 · 0 评论 -
Linux进程实践(4) --wait避免僵尸进程
Wait的背景 当子进程退出的时候,内核会向父进程发送SIGCHLD信号,子进程的退出是个异步事件(子进程可以在父进程运行的任何时刻终止) 子进程退出时,内核将子进程置为僵尸状态,这个进程称为僵尸进程,它只保留最小的一些内核数据结构,以便父进程查询子进程的退出状态。 父进程查询子进程的退出状态可以用wait/waitpid函数[cpp]转载 2015-10-15 18:30:21 · 262 阅读 · 0 评论 -
Linux进程实践(3) --进程终止与exec函数族
进程的几种终止方式(1)正常退出 从main函数返回[return] 调用exit 调用_exit/_Exit(2)异常退出 调用abort 产生SIGABOUT信号 由信号终止 Ctrl+C [SIGINT] ...(并不完全, 如return/pthread_exit等)测试[转载 2015-10-15 14:46:23 · 427 阅读 · 0 评论 -
Linux进程实践(1) --Linux进程编程概述
进程 VS. 程序什么是程序? 程序是完成特定任务的一系列指令集合。什么是进程? [1]从用户的角度来看:进程是程序的一次执行过程 [2]从操作系统的核心来看:进程是操作系统分配的内存、CPU时间片等资源的基本单位。 [3]进程是资源分配的最小单位 [4]每一个进程都有自己独立的地址空间与执行状态。 [5]像UNIX这转载 2015-10-15 10:12:00 · 230 阅读 · 0 评论 -
文件I/O实践(3) --文件共享与fcntl
文件共享一个进程打开了两个文件文件表条目(file-table-entry): 1.文件状态标志(file-status-flags): 读/写/追加/同步/非阻塞等; 2.当前文件偏移量 3.v节点指针[cpp] view plaincopy//验证 int转载 2015-10-14 21:52:37 · 340 阅读 · 0 评论 -
Linux进程实践(2) --僵尸进程与文件共享
孤儿进程与僵尸进程孤儿进程: 如果父进程先退出,子进程还没退出那么子进程的父进程将变为init进程。(注:任何一个进程都必须有父进程)[cpp] view plaincopy//生成孤儿进程 int main(int argc, char *argv[]) { pid_t pid = fork()转载 2015-10-15 14:02:36 · 355 阅读 · 0 评论 -
Buffer和Cache的区别
什么是Cache?什么是Buffer?二者的区别是什么? 缓存(cached)是把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。 缓冲(buffers)是根据磁盘的读写设计的,把分散的写操作集中进行,减原创 2015-10-13 10:25:36 · 251 阅读 · 0 评论 -
文件I/O实践(2) --文件stat
功能:获取文件元数据[cpp] view plaincopy#include #include #include int stat(const char *path, struct stat *buf); int fstat(int fd, struct stat *buf); int lstat(cons原创 2015-10-12 22:18:00 · 587 阅读 · 0 评论 -
unix环境变量高级编程(一):erron变量解析
#include#include#include#includeint main(){ int ret = 0; ret = close(10);/* if(ret == -1) perror("close error");*/ if(ret == -1) {原创 2015-10-11 19:21:02 · 530 阅读 · 0 评论 -
文件I/O实践(1) --基础API
什么是I/O输入/输出是内存和外设之间拷贝数据的过程: 设备->内存: 输入操作 内存->设备: 输出操作 高级I/O: ANSI C提供的标准I/O库函数成为高级I/O, 也称为带缓冲的I/O; 低级I/O: Linux 提供的系统调用, 通常也称为不带缓冲的I/O; 文件描述符 对于Linux内核而言, 所有的文转载 2015-10-11 21:22:22 · 269 阅读 · 0 评论 -
Linux IPC实践(1) --匿名PIPE
管道概念 管道是Unix中最古老的进程间通信的形式,我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”, 管道的本质是固定大小的内核缓冲区; 如:ps aux | grep httpd | awk '{print $2}' 管道限制 1)管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道; 2)匿名管道只能用转载 2015-10-20 10:10:12 · 303 阅读 · 0 评论 -
Linux IPC实践(3) --具名FIFO
FIFO具名/命名管道 (匿名)管道应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。 如果我们想在不相关的进程之间交换数据,可以使用FIFO文件来做这项工作,它经常被称为命名管道;命名管道是一种特殊类型的文件. 创建一个命名管道1)命名管道可以从命令行上创建: $ mkfifo 2)命名管道在程序里创建:转载 2015-10-20 10:17:05 · 173 阅读 · 0 评论 -
Linux信号实践(3) --信号内核表示
信号在内核中的表示 执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending)。进程可以选择阻塞(Block)某个信号。被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作。 注意,阻塞和忽略是不同,只要信号被阻塞就不会递达,而忽略是在递达之后可选的一种处理动作。信号在内核中的表示可以看作是这样转载 2015-10-16 17:41:26 · 303 阅读 · 0 评论 -
Linux信号实践(4) --可靠信号
Sigaction[cpp] view plaincopy#include int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); 功能: sigacti转载 2015-10-16 17:42:48 · 340 阅读 · 0 评论 -
Linux信号实践(5) --时间与定时器
三种不同精度的睡眠1.sleep[cpp] view plaincopy#include unsigned int sleep(unsigned int seconds); RETURN VALUE Zero if the requested time has elapsed, or the numb转载 2015-10-16 17:43:57 · 281 阅读 · 0 评论 -
Linux信号实践(2) --信号分类
信号分类 不可靠信号Linux信号机制基本上是从UNIX系统中继承过来的。早期UNIX系统中的信号机制比较简单和原始,后来在实践中暴露出一些问题,它的主要问题是: 1.进程每次处理信号后,就将对信号的响应设置为默认动作。在某些情况下,将导致对信号的错误处理;因此,用户如果不希望这样的操作,那么就要在信号处理函数结尾再一次调用signal(),重新安装该信号。转载 2015-10-16 17:40:07 · 314 阅读 · 0 评论 -
Linux进程实践(5) --守护进程
概述 守护进程是在需要在后台长期运行不受终端控制的进程,通常情况下守护进程在系统启动时自动运行,在服务器关闭的时候自动关闭;守护进程的名称通常以d结尾,比如sshd、xinetd、crond、atd等。守护进程编程规则 调用umask将文件模式创建屏蔽字设置为一个已知值(通常是0) 调用fork(),创建新进程,它会是将来的守护进程转载 2015-10-15 19:16:54 · 246 阅读 · 0 评论