02 2016 档案
摘要:线程概念 1.线程就是轻量级的进程。 2.线程与创建它的进程共享代码段和数据段。 3.线程拥有自己独立的栈。 线程特点 线程可以和进程做相同或不同的工作,但是与进程共享资源。 线程互斥 在实际应用中,多个线程往往会访问同一个数据或资源,为避免线程之间相互影响,需要引入线程互斥机制,而互斥锁(mute
阅读全文
摘要:消息队列 消息队列就是一个消息的链表。而一条消息则可以看作一个记录,具有特定的格式。进程可以向中按照一定的规则添加新消息;另一些进程则可以从消息队列中读走消息。 消息格式 每一条消息都有固定的格式。格式如下: struct msgbuf { long mtype; /* message type,
阅读全文
摘要:共享内存 共享内存是IPC机制中的一种,它允许两个相关的进程访问同一段内存,这是传递数据的一种有效的方式。 A.c #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <stdio.h> #include
阅读全文
摘要:进程同步 一组并发进程进行相互合作、相互等待,使得各进程按一定的顺序执行的过程称为进程间的同步。 进程同步与进程互斥 进程同步问题的关键在于生产者不需要获取信号量,消费者不需要释放信号量,所以信号量的初值设置为0。但是进程互斥问题中双方都需要获取和释放信号量,所以信号量的初值至少为1。 produc
阅读全文
摘要:信号量分类 1.二值信号量:信号量的值只能或0或1。 2.计数信号量:信号量的初始值大于1。 什么是键值 1.文件通过文件名来打开文件,从而得到文件的标示符;信号量通过键值来打开信号量,从而得到信号量的标示符。 2.在创建信号量的时候指定键值。 指定键值 1.选择任意数值 2.通过函数构造,例如:k
阅读全文
摘要:信号 在Linux系统中,信号(signal)是一种事件通知的进程通讯方式。 信号处理流程 1.进程A选择信号 2.进程A发送信号给进程B 3.进程B接收信号 信号类型 Linux系统支持的所有信号都定义在/usr/include/asm/signal.h中,其中常见的信号有: SIGKILL:杀死
阅读全文
摘要:有名管道 有名管道又称为FIFO文件,因此我们对有名管道的操作可以采用文件操作的方法,如使用open,read,write等。 FIFO文件的特点 1.读取FIFO文件的进程只能以RDONLY方式打开FIFO文件。 2.写入FIFO文件的进程只能以WRONLY方式打开FIFO文件。 3.FIFO文件
阅读全文
摘要:通讯目的 1.数据传输 一个进程需要将数据发送给另外一个进程。 2.资源共享 多个进程之间共享同样的资源。 3.通知事件 一个进程需要向另外一个/组进程发送消息,通知它们发生了某事件。 4.进程控制 有些进程希望完全控制另外一个进程的执行,此时控制进程希望能够拦截另外一个进程的所有操作,并能够及时知
阅读全文
摘要:fork.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> void main(){ int pid; pid = fork(); printf("pid is %d\n", pid); exit(0); } vfork.c #
阅读全文
摘要:进程概念 进程是一个具有一定独立功能的程序的一次运行活动。也就是运行起来的程序。 进程特点 动态性、并发性、独立性、异步性 进程状态 就绪态、执行态、阻塞态 进程ID 进程ID:标识进程的唯一数字 父进程ID:PPID 启动进程ID:UID 进程互斥 进程互斥是指当有若干个进程都要使用某一个资源时,
阅读全文
摘要:时间类型 Coordinated Universal Time(UTC):世界标准时间,也就是格林威治时间(Greenwich Mean Time, GMT)。 Calendar Time:日历时间,是用一个标准时间点(1970年1月1日0点)到此时所经过的秒数来表示的时间。 #include <s
阅读全文
摘要:#include<stdio.h> void main(){ //打开文件 FILE *fp; fp = fopen("test.txt", "r+"); if(fp == NULL){ printf("File open fail!\n"); } //写入数据 char wbuf[10] = "5
阅读全文
摘要:#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> void main(){ //打开文件 int fd; fd = open("./test.c
阅读全文
摘要:制作动态链接库 1.生成中间文件 gcc –c mylib.c –o mylib.o 2.生成动态链接库 gcc –shared –fPIC mylib.o –o libmylib.so -fPIC 使输出的对象模块是按照可重定位地址方式生成的。 -shared 指明产生动态链接库 3.将制作好的l
阅读全文
摘要:外部函数 Linux应用程序设计中需要的外部函数主要由函数库和系统调用来提供。 两者区别 系统调用在Linux内核中位于核心态,而函数库是由工程师提供位于用户态 函数库分类 函数库按照链接方式可以分为静态函数库和动态函数库 存放位置 Linux应用程序使用的主要函数库均存放于/lib,/usr/li
阅读全文
摘要:程序构成 代码段、数据段、BSS段(Block Started by Symbol,又叫:未初始化数据段)、堆(heap)和栈(stack)。这些部分构成了Linux应用程序的重要组成部分。 内存布局 1.从低地址到高地址分别为:代码段(0x8048000)、数据段、BSS段、堆、栈。 2.堆向高内
阅读全文
摘要:Core Dump定义 Core Dump又叫核心转存。当程序在运行过程中发生异常,Linux系统可以把程序出错时的内存内容存储在一个core文件中,这个过程叫Core Dump。 Core Dump主要用来对付Segment fault错误。Linux应用程序在运行过程中,经常会遇到Segemt
阅读全文
摘要:GDB是GNU发布的一款功能强大的调试工具。GDB主要完成下面三个方面的功能: 1.启动被调试的程序。 2.让被调试的程序在指定的位置停住。 3.当程序被停住时,可以检测程序状态。 GDB使用流程 1.编译生成可调试的程序 gcc –g test.c –o test 2.启动GDB gdb test
阅读全文