摘要: 基本概念 线程:进程中的某一个处理流程 一个进程可以有多个线程,进程是线程的父进程 所有线程与父进程共享资源 线程分类 内核态线程 由内核调度程序直接调度,充分发挥多处理器的优势 目前linux系统标准线程库采用内核线程方式实现多线程 用户态线程 一个进程包含多个线程,这些线程从内核调度角度来看只是 阅读全文
posted @ 2018-06-22 23:58 gd_沐辰 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 例子:利用两个子进程从50进行降序输出 int g_num=50; //偶数 void *threadEven(void *lParam) { while(g_num>0) { if(!(g_num&1)) { printf("even:%d\n",g_num); } g_num--; usleep 阅读全文
posted @ 2018-06-22 23:58 gd_沐辰 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 共享内存 是最快的IPC通信方式,不存在数据复制,而是直接内存读写 涉及到多个进程访问,可能出现同时读、写操作,一般采用信号量的方式,进行互斥操作 步骤: 内存共享使用 1: ftok 使用某个文件做关键字创建key 2: shmget 使用key 创建(打开)共享内存 shmid 3: shmat 阅读全文
posted @ 2018-06-22 23:57 gd_沐辰 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 信号量:为控制临界资源而产生的一个或一组计数器,本质上是一个整数变量。用于进程的互斥操作 信号量基本操作 P 操作 进程申请临界资源时发出 P 操作 流程:检查信号量取值, > 0 则分配临界资源,信号值-1; 否则表示无空余资源,进程阻塞直到指定资源被释放 V 操作 进程释放临界资源时发出 V 操 阅读全文
posted @ 2018-06-22 23:56 gd_沐辰 阅读(397) 评论(0) 推荐(0) 编辑
摘要: 消息与消息队列 IPC (Inter process communication) 广义:所有可以用于进程间通信的对象和方法 狭义:特指消息队列,信号量,共享内存 消息队列 应用于进程间少量数据的顺序共享 信号量 应用于进程间互斥 共享内存 应用与进程间大量数据的随机共享访问 命令行查询IPC对象 阅读全文
posted @ 2018-06-22 23:55 gd_沐辰 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 命名管道 FIFO (First In First Out) 命令行: mknod mknod [-m mode] NAME TYPE [ MAJOR MINOR] mknod name b | c major minor //块设备,字符设备文件 mknod name p //管道文件 mknod 阅读全文
posted @ 2018-06-22 23:54 gd_沐辰 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 重定向 dup2 int dup(int fd) 重定向文件描述符 int newFd = dup(STDOUT_FILENO) newFd 指向 stdout int dup2(int fd1, int fd2) 重定向文件描述符 dup2(newFd, STDOUT_FILENO) stdout 阅读全文
posted @ 2018-06-22 23:53 gd_沐辰 阅读(282) 评论(0) 推荐(0) 编辑
摘要: 管道概念 进程间通信工具, 把数据从一端输出到另一端 如 ps –ef | grep pts 相当于 1: ps –ef > tmpfile 2: grep pts < tmpfile 半双工通信 无名管道(直接称之为管道), 只能用于父子进程或者兄弟进程间通信。 命名管道 , 可以用于所有进程间通 阅读全文
posted @ 2018-06-22 23:52 gd_沐辰 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 简单定时器 #include<unistd.h> unsigned int alarm(unsigned int seconds) 返回上一个alarm等待时间,没有则返回0 只能设置 1 个定时器,设置第 2 个时会替换第一个 设置成功后,上一个alarm会失效 定时事件只执行1次,多次执行需要递 阅读全文
posted @ 2018-06-22 23:51 gd_沐辰 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 多路复用 select 同时监控多个文件描述符的输入输出 <sys/types.h> <sys/times.h> <sys/select.h> int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, str 阅读全文
posted @ 2018-06-22 23:51 gd_沐辰 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 前面的进程控制2,介绍了僵尸进程,和解决方式4种中的两种。下面再补充两种。 解决方式: 3:忽略SIGCHLD信号 父进程设置忽略 SIGCHLD信号,子进程结束自动释放进程表资源 忽略SIGCHLD信号: signal(SIGCHLD, SIG_IGN) 4:捕获SIGCHLD信号 父进程捕获SI 阅读全文
posted @ 2018-06-22 23:50 gd_沐辰 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 信号处理 信号值小于 SIGRTMIN 的信号 (1~31) 都是不可靠信号 某些unix版本中,调用信号函数处理后会自动恢复默认信号处理,所以在信号处理函数中还需要继续调用signal函数设置信号处理 这个问题在linux中并不存在 linux 信号处理使用 sigaction函数, sigact 阅读全文
posted @ 2018-06-22 23:50 gd_沐辰 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 系统时间 #include<time.h> time_t time(time_t &tSec) 获取当前时间,1900年1月1日0时到现在的秒钟数 double difftime(time_t timeEnd, time_t timeStart) 时间差 系统时间 两个互逆的函数 struct tm 阅读全文
posted @ 2018-06-22 23:49 gd_沐辰 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 信号 传送给进程的事件通知,完成异步通信 信号的产生 1.程序错误:硬件异常,除数为0,等 2.外部事件:定时器事件,按键中断(ctrl+c)等 3.显示请求:调用 kill, raise 等信号发送函数 信号的处理 #include<signal.h> void (*signal (int sig 阅读全文
posted @ 2018-06-22 23:49 gd_沐辰 阅读(1694) 评论(0) 推荐(0) 编辑
摘要: 同步父子进程 wait<sys/wait.h>pid_t wait(int *pState)无子进程则马上返回,有子进程则等待(阻塞)。多个子进程,需要多个调用获取子进程 pid 和 结束状态第一字节: *pState & 0xff 接受到的信号值第二字节: (*pState >> 8) & 0xf 阅读全文
posted @ 2018-06-22 23:47 gd_沐辰 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 概念 程序:一个保存在磁盘中的文件,规定运行时要执行的代码和要完成的动作。 进程:把程序加载为内存中一段数据,程序的执行过程,具有产生,发展和消亡的过程 线程:unix的最小调度单位,一个进程可以有多个线程,共享进程ID,共享进程资源。 父子进程 进程采用树形结构管理,一个进程启动另一个进程时,被启 阅读全文
posted @ 2018-06-22 23:42 gd_沐辰 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 异或运算:^ --> 两个变量,按照bit位比较,同位置 bit位相等 则结果为 0, 不相等,则结果为1 任意数 x x^x = 0; x^(~x) = 0xffffffff x^0 = x; x^0xffffffff = ~x 或运算:| --> 把两个变量, 按照bit位比较,同位置的bit位 阅读全文
posted @ 2018-06-22 23:40 gd_沐辰 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 设备文件 Linux把所有设备都映射成了文件 设备文件一般存储在 /dev 目录下 我们可以像操作文件一样操作他们 ls /dev –l brw-rw 1 root disk 8, 0 Dec 21 20:00 sda crw--w 1 root tty 4, 0 Dec 21 20:00 tty0 阅读全文
posted @ 2018-06-22 23:37 gd_沐辰 阅读(568) 评论(0) 推荐(0) 编辑
摘要: 低级文件库 低级文件读写与标准文件读写类似。如fgetc,fputs都是调用read,write。 文件打开/创建#include <fcntl.h> //file controlint open(const char *filename, int flag, [mode_t mode])flag 阅读全文
posted @ 2018-06-22 23:35 gd_沐辰 阅读(388) 评论(0) 推荐(0) 编辑
摘要: makefile编译多个可执行文件1: 多个 C 文件编译成不同的目标文件2: 多个 C 文件编译成 一个目标文件 注意:makefile的文件名的三种形式(优先级排序)makefile>Makefile>GNUMakefile 简单说,makefile类似快捷键。如:创建主函数文件mian.c 函 阅读全文
posted @ 2018-06-22 23:31 gd_沐辰 阅读(169) 评论(0) 推荐(0) 编辑