linux环境编程
文章平均质量分 65
Alatebloomer
这个作者很懒,什么都没留下…
展开
-
gcc学习
gcc简介1、 gcc是GNU Compiler Collection的缩写。最初是作为C语言的编译器(GNU C Compiler),作者为Richard Stallman,是GNU项目的奠基者;现在已经支持多种语言,如C、C++、Java、Pascal、Ada、COBOL语言等 。2、主要特征:gcc是一个可移植的编译器,支持多种硬件平台,甚至对Don Knuth 设计的 MMI...原创 2018-07-17 22:18:08 · 355 阅读 · 0 评论 -
Linux多线程 --线程属性
线程属性初始化/销毁线程属性int pthread_attr_init(pthread_attr_t *attr);int pthread_attr_destroy(pthread_attr_t *attr);获取/设置线程分离属性int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *detachs...原创 2018-08-22 14:01:59 · 300 阅读 · 0 评论 -
Linux多线程--POSIX信号量、互斥锁、读写锁、条件变量
Posix信号量 Posix 信号量 有名信号量 无名信号量 sem_open sem_init sem_close sem_destroy sem_unlink ...原创 2018-08-22 17:17:46 · 355 阅读 · 0 评论 -
简单线程池实现
目标1.用于执行大量相对短暂的任务2.当任务增加的时候能够动态的增加线程池中线程的数量值到达一个阈值3.当任务执行完毕的时候,能够动态的销毁线程池中的线程4.该线程池的实现本质上也是生产者与消费者模型的应用。生产者线程向任务队列添加任务,一旦队列有任务到来,如果有等待线程就唤醒来执行任务,如果没有等待线程并且线程数没有达到阈值,就创建线程来执行任务。线程池拥有若干个线程,通常情...原创 2018-08-22 20:20:11 · 411 阅读 · 0 评论 -
linux进程(4):wait,waitpid
本节学习SIGCHLD、wait、waitpid、僵尸进程、systemSIGCHLD当子进程退出的时候,内核会向父进程发送SIGCHLD信号,子进程的退出是个异步事件(子进程可以在父进程运行的任何时刻终止) 子进程退出时,内核将子进程置为僵尸状态,这个进程称为僵尸进程,它只保留最小的一些内核数据结构,以便父进程查询子进程的退出状态。 父进程查询子进程的退出状态可以用wait/wait...原创 2018-08-17 17:29:33 · 324 阅读 · 0 评论 -
Linux进程(5) --守护进程
守护进程概述Linux Daemon(守护进程)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它不需要用户输入就能运行而且提供某种服务,不是对整个系统就是对某个用户程序提供服务。Linux系统的大多数服务器就是通过守护进程实现的。常见的守护进程包括系统日志进程syslogd、 web服务器httpd、邮件服务器sendmail和数据库服务器mys...原创 2018-08-17 18:24:57 · 367 阅读 · 0 评论 -
Linux信号(1) --Linux信号编程概述
中断 中断是系统对于异步事件的响应, 进程执行代码的过程中可以随时被打断,然后去执行异常处理程序; 计算机系统的中断场景:中断源发出中断信号 -> CPU判断中断是否屏蔽(不予处理)以及保护现场 -> CPU(查询中断向量表, 找到中断服务程序的入口地址)执行中断处理程序 ->(处理完中断之后) ->恢复现场,继续执行原来的任务中断分类硬件中断(...原创 2018-08-17 20:27:57 · 326 阅读 · 0 评论 -
命名管道
FIFO具名/命名管道 (匿名)管道应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。 如果我们想在不相关的进程之间交换数据,可以使用FIFO文件来做这项工作,它经常被称为命名管道; 命名管道是一种特殊类型的文件. 创建一个命名管道1)命名管道可以从命令行上创建: $ mkfifo filename2)命名管道在程序里创建: ...原创 2018-08-20 16:23:03 · 648 阅读 · 0 评论 -
Linux IPC-概述
顺序程序与并发程序顺序程序特征顺序性 封闭性 确定性(运行结果) 可再现性(指的是运行结果)并发程序特征共享性 并发性 随机性 进程的同步与互斥 进程互斥: 由于各进程要求共享资源,而且有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥;系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源, 而在进程中涉及到互斥资...原创 2018-08-20 22:20:13 · 606 阅读 · 0 评论 -
System V消息队列(1)
消息队列概述 消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法(仅局限于本机); 每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值. 消息队列也有管道一样的不足: 每个消息的最长字节数的上限(MSGMAX); 系统中消息队列的总条数也有一个上限(MSGMNI); 每个消息队列所能够保存的总字节数是有上限的(MSGMNB)查看系统...原创 2018-08-21 09:16:08 · 302 阅读 · 0 评论 -
System V消息队列(2)
消息发送/接收APImsgsnd函数int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);参数 msgid: 由msgget函数返回的消息队列标识码, 也可以是通过ipcs命令查询出来的一个已经存在的消息队列的ID号 msgp:是一个指针,指针指向准备发送的消息, msgsz:是m...原创 2018-08-21 09:51:51 · 256 阅读 · 0 评论 -
System V消息队列(3)
消息队列实现回射客户/服务器server进程接收时, 指定msgtyp为1, 从队首不断接收消息server进程发送时, 将mtype指定为接收到的client进程的pid client进程发送的时候, mtype指定为自己进程的pidclient进程接收时, 需要将msgtyp指定为自己进程的pid, 只接收消息类型为自己pid的消息;#include <un...原创 2018-08-21 13:09:38 · 346 阅读 · 0 评论 -
共享内存
共享内存共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据,只需要通过一些内存访问函数来传递。共享内存示意图共享内存是整块内存当中的一块特殊区域,这块区域可以映射到不同的地址空间。A、B进程就可以通过共享内存区传递数据,并且不涉及系统调用。 管道、消息队列与...原创 2018-08-21 14:43:48 · 909 阅读 · 0 评论 -
System V共享内存
共享内存数据结构 struct shmid_ds { struct ipc_perm shm_perm; //IPC对象数据结构 size_t shm_segsz; //共享内存段的大小 time_t shm_atime; //最后一次映射共享内存的时间 time_t shm_d...原创 2018-08-21 15:15:19 · 240 阅读 · 0 评论 -
System V信号量
信号量集数据结构 struct semid_ds { struct ipc_perm sem_perm; //IPC对象数据结构 time_t sem_otime; //最后一次执行semop(PV操作)的时间 time_t sem_ctime; //信号量集状态最后一次改变的时间 unsigned short sem_nsem...原创 2018-08-21 16:06:01 · 200 阅读 · 0 评论 -
System V信号量实现进程互斥和解决哲学家就餐问题
父进程打印输出一个o的字样,子进程打印输出x的字样,父进程打印输出o之后睡眠,睡眠一个随机的时间,然后再次输出o,子进程也是同样的动作,只是输出的是x。父子进程执行流程如下: 父进程 子进程 P P O(print) X(print) sleep ...原创 2018-08-21 16:51:55 · 422 阅读 · 0 评论 -
System V信号量实现生产者消费者
生产者消费者模型 实现一个先进先出的共享内存shmfifo使用消息队列即可实现消息的先进先出(FIFO), 但是使用共享内存实现消息的先进先出则更加快速 shmfifo说明: 将申请到的共享内存作为一块缓冲区, 将该内存的首部(p_shm到p_payload的内容)格式化为如上图所示的形式;读/写进程不断的按照先进先出的原则从其中读出/写入数据, 则读/写进程就...原创 2018-08-21 20:32:59 · 633 阅读 · 0 评论 -
Linux多线程 --线程基本API
POSIX线程库 与线程有关的函数构成了一个完整的系列,绝大多数函数的名字都是以“pthread_”开头,要使用这些函数库,要通过引入头文<pthread.h>,而且链接这些线程函数库时要使用编译器命令的“-lpthread”选项[Ubuntu系列系统需要添加的是”-pthread”选项而不是”-lpthread”,如Ubuntu 14.04版本] 1.pthread_c...原创 2018-08-22 11:19:17 · 1309 阅读 · 1 评论 -
Linux多线程 --线程理论
线程概念 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列/指令序列”; 一切进程至少有一个执行线程;进程 VS. 线程 1.进程是资源分配(进程需要参与资源的竞争)的基本单位,而线程是处理器调度(程序执行)的最小单位; 2.线程共享进程数据,但也拥有自己的一部分数据,如线程ID、一组寄存器(IP,SP)、...原创 2018-08-22 10:37:03 · 191 阅读 · 0 评论 -
makefile工具
简介1)make:利用 make 工具可以自动完成编译工作。这些工作包括:如果仅修改了某几个源文件,则只重新编译这几个源文件[make通过比对相应的.c文件与.o文件的时间];如果某个头文件被修改了,则重新编译所有包含该头文件的源文件。利用这种自动编译可大大简化开发工作,避免不必要的重新编译。2)Mackfile:make工具通过一个称为 Mackfile 的文件来完成并自动维护编译工作。...原创 2018-07-24 14:12:02 · 906 阅读 · 0 评论 -
gdb学习
概述gdb是GNU debugger的缩写,是编程调试工具。功能1、启动程序,可以按照用户自定义的要求随心所欲的运行程序。2、可让被调试的程序在用户所指定的断点处停住 (断点可以是条件表达式)。3、当程序停住时,可以检查此时程序中所发生的事。4、动态改变程序的执行环境。 示例:gcc -Wall -g simple.c -o simple#一定要记得加...原创 2018-07-24 16:37:03 · 392 阅读 · 1 评论 -
1.认识计算机系统
目录 计算机系统硬件组成总线I/O设备内存处理器DMA传输操作系统系统编程 VS. 应用编程错误处理计算机系统硬件组成 总线贯穿整个系统的一组电子管道称为总线, 分为:片内总线:cpu内部系统总线数据总线DB 传输数据(cpu----内存) 地址总线AB 传输地址 控制总线CB 控制信号(读写控制),时序信号外部总线 (cp...原创 2018-07-25 13:22:59 · 1195 阅读 · 0 评论 -
文件与IO(1)-读写访问
目录 什么是I/O文件描述符文件指针与文件描述符的转换文件系统调用文件的随机读写目录访问什么是I/O输入/输出是内存和外设之间拷贝数据的过程: 设备->内存: 输入操作 内存->设备: 输出操作 高级I/O: ANSI C提供的标准I/O库函数成为高级I/O, 也称为带缓冲的I/O; 低级I/O: Linux 提供的系统调用,...原创 2018-07-31 16:21:23 · 403 阅读 · 0 评论 -
文件I/O(2) --文件stat
stat功能:获取文件元数据#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>int stat(const char *path, struct stat *buf);int fstat(int fd, struct stat *buf);int lstat(const c...原创 2018-07-31 17:16:20 · 327 阅读 · 0 评论 -
文件I/O(3)--文件共享
文件共享 文件表条目(file-table-entry): 1.文件状态标志(file-status-flags): 读/写/追加/同步/非阻塞等; 2.当前文件偏移量 3.v节点指针一个进程打开了两个文件一个进程两次打开一个文件时,文件表是不同的,文件状态标志可能是不同的,例如读与写标志、//验证int main(int argc, c...原创 2018-08-01 22:13:56 · 241 阅读 · 0 评论 -
Linux进程(3)--进程终止与exec函数族
进程的几种终止方式(1)正常退出 从main函数返回[return] 调用exit 调用_exit/_Exit(2)异常退出 调用abort 产生SIGABOUT信号 由信号终止 Ctrl+C [SIGINT] ...(并不完全, 如return/pthread_exit等)系统调用_exit直接陷入内核,而C语言库函数是经过一...原创 2018-08-15 00:18:01 · 483 阅读 · 0 评论 -
Linux进程(1) --Linux进程编程概述
什么是程序程序是完成特定任务的一系列指令集合。什么是进程从用户的角度来看进程是程序的一次执行过程 从操作系统的核心来看,进程是操作系统分配的内存、CPU时间片等资源的基本单位。 进程是资源分配的最小单位 每一个进程都有自己独立的地址空间与执行状态。 像UNIX这样的多任务操作系统能够让许多程序同时运行,每一个运行着的程序就构成了一个进程进程数据结构进程由三部分组成:PCB...原创 2018-08-03 11:58:01 · 311 阅读 · 0 评论 -
Linux信号(2) --信号分类
信号分类 不可靠信号Linux信号机制基本上是从UNIX系统中继承过来的。早期UNIX系统中的信号机制比较简单和原始,后来在实践中暴露出一些问题,它的主要问题是: 1.进程每次处理信号后,就将对信号的响应设置为默认动作。在某些情况下,将导致对信号的错误处理;因此,用户如果不希望这样的操作,那么就要在信号处理函数结尾再一次调用signal(),重新安装该信号。 2.因此导致,...原创 2018-08-18 10:15:44 · 823 阅读 · 0 评论 -
inux信号(3):信号内核表示 、操作函数,阻塞与未决
信号在内核中的表示 执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending)。进程可以选择阻塞(Block)某个信号。被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作。 注意,阻塞和忽略是不同,只要信号被阻塞就不会递达,而忽略是在递达之后可选的一种处理动作。信号在内核中的表示可以看作是这样的:...原创 2018-08-18 11:02:12 · 239 阅读 · 0 评论 -
linux信号(4):信号安装函数sigaction和信号发送函数sigqueue
Sigaction 信号安装 signaction 和signal都是信号安装函数#include <signal.h>int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);功能: sigaction函数用于改...原创 2018-08-18 14:01:52 · 750 阅读 · 0 评论 -
Linux进程(2) --僵尸进程与文件共享
孤儿进程与僵尸进程孤儿进程: 如果父进程先退出,子进程还没退出那么子进程成为孤儿进程,此时子进程的父进程将变为init进程(托孤给了init进程)。(注:任何一个进程都必须有父进程)//生成孤儿进程int main(int argc, char *argv[]){ pid_t pid = fork(); if (pid < 0) err_e...原创 2018-08-13 22:24:59 · 245 阅读 · 0 评论 -
Linux信号(5) --时间与定时器
三种不同精度的睡眠1.sleep#include <unistd.h>unsigned int sleep(unsigned int seconds);RETURN VALUE Zero if the requested time has elapsed, or the number of seconds left to sleep, if the ca...原创 2018-08-18 14:53:40 · 414 阅读 · 0 评论 -
匿名管道
管道概念 管道是Unix中最古老的进程间通信的形式,我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”, 管道的本质是固定大小的内核缓冲区; 如:ps aux | grep httpd | awk '{print $2}' 管道限制 管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道; 只能用于具有共同祖先的进程(具有亲缘关系的进程)之...原创 2018-08-18 15:31:58 · 959 阅读 · 0 评论 -
posix消息队列
posix和System V历史 UNIX两大贡献者贝尔实验室和BSD,在进程之间通信侧重不同,前者基于内核对进程之间的通信手段进行了改进,形成了“System V IPC”,而后者则是基于网络形成了套接字。 而POSIX则是IEEE制定的标准,目的是为运行在不同操作系统上的软件提供统一的接口,实现者则是不同的操作系统内核开发人员。说明 在信...原创 2018-08-22 09:33:14 · 314 阅读 · 0 评论 -
POSIX共享内存
1. 创建/获取一个共享内存#include <sys/mman.h>#include <sys/stat.h> /* For mode constants */#include <fcntl.h> /* For O_* constants */int shm_open(const char *name, int o...原创 2018-08-22 10:04:07 · 621 阅读 · 0 评论 -
Socket编程(1) --TCP/IP简述
ISO的OSI OSI(open system interconnection)开放系统互联模型是由ISO国际标准化组织定义的网络分层模型,共七层, 从下往上为: OSI七层参考模型 物理层(Physical Layer) 物理层定义了所有电子及物理设备的规范,为上层的传输提供了一个物理介质,本层中数据传输的单位为比特(bit/二进...原创 2018-09-01 09:45:35 · 252 阅读 · 0 评论