![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux系统编程
linux用户态编程
HappyMrSpring
这个作者很懒,什么都没留下…
展开
-
linux系统编程之信号(六):竞态条件与sigsuspend函数
转自:https://blog.csdn.net/Simba888888/article/details/8949266一、利用pause和alarm函数实现sleep函数#include <unistd.h>int pause(void);pause函数使调用进程挂起直到有信号递达。如果信号的处理动作是终止进程,则进程终止,pause函数没有机会返回;如果信号的处理动作...转载 2019-03-05 15:49:33 · 148 阅读 · 0 评论 -
linux系统编程之信号(五):实时信号与sigqueue函数
转自:https://blog.csdn.net/Simba888888/article/details/8947652一、sigqueue函数功能:新的发送信号系统调用,主要是针对实时信号提出的支持信号带有参数,与函数sigaction()配合使用。原型:int sigqueue(pid_t pid, int sig, const union sigval value);参数:s...转载 2019-03-05 15:48:36 · 326 阅读 · 0 评论 -
linux系统编程之信号(四):信号的捕捉与sigaction函数
转自:https://blog.csdn.net/Simba888888/article/details/8947410一、内核如何实现信号的捕捉如果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为捕捉信号。由于信号处理函数的代码是在用户空间的,处理过程比较复杂,举例如下:1. 用户程序注册了SIGQUIT信号的处理函数sighandler。2. 当前正在执行main...转载 2019-03-05 15:47:38 · 297 阅读 · 0 评论 -
linux系统编程之信号(三):信号的阻塞与未决
转自:https://blog.csdn.net/Simba888888/article/details/8944982一、信号在内核中的表示实际执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending)。进程可以选择阻塞(Block)某个信号,SIGKILL 和 SIGSTOP 不能被阻塞。被阻塞的信号产生时将保持在未决状态,直到进程解...转载 2019-03-05 15:46:43 · 182 阅读 · 0 评论 -
linux系统编程之信号(二):一些信号发送函数和不同精度的睡眠
转自:https://blog.csdn.net/Simba888888/article/details/8944647一、kill, raise, killpg 函数int kill(pid_t pid, int sig);int raise(int sig);int killpg(int pgrp, int sig);kill命令是调用kill函数实现的,kill函数...转载 2019-03-05 15:45:46 · 114 阅读 · 0 评论 -
linux系统编程之信号(一):信号基本概述
转自:https://blog.csdn.net/Simba888888/article/details/8940602一、为了理解信号,先从我们最熟悉的场景说起:1. 用户输入命令,在Shell下启动一个前台进程。2. 用户按下Ctrl-C,这个键盘输入产生一个硬件中断。3. 如果CPU当前正在执行这个进程的代码,则该进程的用户空间代码暂停执行,CPU从用户态切换到内核态处理硬件中断。...转载 2019-03-05 15:44:18 · 184 阅读 · 1 评论 -
linux系统编程之进程(四):wait/waitpid函数与僵尸进程、fork 2 times
转自:https://blog.csdn.net/Simba888888/article/details/8931908一、僵尸进程当子进程退出的时候,内核会向父进程发送SIGCHLD信号,子进程的退出是个异步事件(子进程可以在父进程运行的任何时刻终止)子进程退出时,内核将子进程置为僵尸状态,这个进程称为僵尸进程,它只保留最小的一些内核数据结构,以便父进程查询子进程的退出状态。...转载 2019-03-06 09:36:17 · 157 阅读 · 0 评论 -
linux系统编程之进程(五):终端、作业控制与守护进程
转自:https://blog.csdn.net/Simba888888/article/details/8932176一、终端的概念在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进程的控制终端(Controlling Terminal),控制终端是保存在PCB中的信息,而我们知道fork会复制PCB中的信息,因此由Shell进程启动的其它进程的控制...转载 2019-03-06 09:36:40 · 175 阅读 · 0 评论 -
linux系统编程之进程(三):exec系列函数和system函数
转自:https://blog.csdn.net/Simba888888/article/details/8930400一、exec替换进程映象在进程的创建上Unix采用了一个独特的方法,它将进程创建与加载一个新进程映象分离。这样的好处是有更多的余地对两种操作进行管理。当我们创建了一个进程之后,通常将子进程替换成新的进程映象,这可以用exec系列的函数来进行。当然,exec系列的...转载 2019-03-05 16:09:36 · 241 阅读 · 0 评论 -
linux系统编程之进程(二):fork函数相关总结
转自:https://blog.csdn.net/Simba888888/article/details/8928635fork的作用是根据一个现有的进程复制出一个新进程,原来的进程称为父进程(Parent Process),新进程称为子进程(Child Process)。系统中同时运行着很多进程,这些进程都是从最初只有一个进程开始一个一个复制出来的。在Shell下输入命令可以运行一个程...转载 2019-03-05 16:08:39 · 171 阅读 · 0 评论 -
linux系统编程之进程(一):进程基本概述
转自:https://blog.csdn.net/Simba888888/article/details/8927577一、什么是进程从用户的角度来看进程是程序的一次执行过程。从操作系统的核心来看,进程是操作系统分配的内存、CPU时间片等资源的基本单位。进程是资源分配的最小单位。每一个进程都有自己独立的地址空间与执行状态。像UNIX这样的多任务操作系统能够让许多程序同时运行,每一个...转载 2019-03-05 16:07:48 · 160 阅读 · 0 评论 -
linux系统编程之文件与I/O(六):fcntl 函数与文件锁
转自:https://blog.csdn.net/Simba888888/article/details/8927115一、fcntl函数功能:操纵文件描述符,改变已打开的文件的属性int fcntl(int fd, int cmd, ... /* arg */ );cmd的取值可以如下:复制文件描述符F_DUPFD (long)设置/获取文件描述符标志F_GE...转载 2019-03-11 16:32:42 · 140 阅读 · 0 评论 -
linux系统编程之文件与I/O(五):文件的内核结构file和dup实现重定向
转自:https://blog.csdn.net/Simba888888/article/details/8926258一、打开文件内核数据结构1、一个进程打开两个文件文件状态标志:读、写、追加、同步、非阻塞等2、一个进程两次打开同一文件3、两个进程打开同一文件示例程序:C++ Code 1 2 3 4 5...转载 2019-03-11 16:31:54 · 123 阅读 · 0 评论 -
linux系统编程之文件与I/O(四):文件的属性
转自:https://blog.csdn.net/Simba888888/article/details/8921110一、读取文件元数据int stat(const char *path, struct stat *buf);int fstat(int fd, struct stat *buf);int lstat(const char *path, struct stat *buf...转载 2019-03-11 16:31:03 · 155 阅读 · 0 评论 -
Linux下文件及目录的一些操作(附递归遍历目录源码)
1.获取当前工作目录#include <unistd.h>char *getcwd(char *buf, size_t size);参数: buf:缓冲区地址。 size:给出的最大路径名长度。返回值: 如果当前工作目录的路径名长度大于给定的长度,则返回NULL并置errno为ERANGE。 函数调用成功时,返回指向路径名的指针;否则返回N...转载 2019-03-07 10:21:40 · 401 阅读 · 0 评论 -
mini_httpd、cgi与dup2重定向标准输入输出
最近一段时间在用c写cgi程序,接触了这两个系统调用dup/dup2,碰到了一些问题, 也解决了一些问题, 写出来与大家分享,也方便以后参考:)1. 文件描述符在内核中数据结构 在具体说dup/dup2之前, 我认为有必要先了解一下文件描述符在内核中的形态。一个进程在此存在期间,会有一些文件被打开,从而会返回一些文件描述符,从shell中运行一个进程,默认会有3个文件描述符存在(0...转载 2019-03-07 10:04:36 · 416 阅读 · 0 评论 -
linux系统编程之文件与I/O(三):目录的操作
转自:https://blog.csdn.net/Simba888888/article/details/8918396一、目录的访问功能说明:打开一个目录原型:DIR* opendir(char *pathname);返回值:打开成功,返回一个目录指针打开失败,则返回NULL功能说明:访问指定目录中下一个连接的细节原型:struct dirent* readd...转载 2019-03-06 17:37:59 · 140 阅读 · 0 评论 -
linux系统编程之文件与I/O(二):文件的读取写入(read/write/ioctl/lseek与O_APPEND,与管道或socket,空洞文件)
2013年05月12日 21:45:07 s1mba 阅读数:2917 标签: 文件与IO 收起个人分类: linux系统编程 所属专栏: linux环境系统编程版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Simba888888/article/details/8917991一、read系统调用一旦有了与一个打开文件...转载 2019-03-06 16:50:33 · 724 阅读 · 0 评论 -
linux系统编程之文件与I/O(一):文件的打开关闭
转自:https://blog.csdn.net/Simba888888/article/details/8917854一、文件描述符对于Linux而言,所有对设备或文件的操作都是通过文件描述符进行的。当打开或者创建一个文件的时候,内核向进程返回一个文件描述符(非负整数)。后续对文件的操作只需通过该文件描述符,内核记录有关这个打开文件的信息(file结构体)。一个进程启动时,默认打开了3...转载 2019-03-06 16:35:22 · 192 阅读 · 0 评论 -
linux系统编程之管道(三):命名管道FIFO和mkfifo函数
转自:https://blog.csdn.net/Simba888888/article/details/8953960进程间通信必须通过内核提供的通道,而且必须有一种办法在进程中标识内核提供的某个通道,前面讲过的匿名管道是用打开的文件描述符来标识的。如果要互相通信的几个进程没有从公共祖先那里继承文件描述符,它们怎么通信呢?内核提供一条通道不成问题,问题是如何标识这条通道才能使各进程都可...转载 2019-03-12 16:56:51 · 375 阅读 · 0 评论 -
linux系统编程之管道(二):管道读写规则和Pipe Capacity、PIPE_BUF
转自:https://blog.csdn.net/Simba888888/article/details/8952287一、当没有数据可读时O_NONBLOCK disable:read调用阻塞,即进程暂停执行,一直等到有数据来到为止。O_NONBLOCK enable:read调用返回-1,errno值为EAGAIN。示例程序如下:C++ Code 1 ...转载 2019-03-12 16:09:20 · 275 阅读 · 0 评论 -
linux系统编程之管道(一):匿名管道和pipe函数
转自:https://blog.csdn.net/Simba888888/article/details/8950648一、进程间通信每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,Int...转载 2019-03-12 15:38:47 · 312 阅读 · 0 评论