unix环境高级编程
文章平均质量分 91
庾志辉
这个作者很懒,什么都没留下…
展开
-
Linux中的函数间跳转:setjmp()和longjmp()
先来看个实例吧,在 用c++写的简易学生通讯录中有那么个实例:删除通讯录中某个人的号码;1、开始是主页面菜单函数,选择删除功能后;2、跳转到删除信息函数中,在这个函数中还要先调用查找函数;3、在查找函数中又要判断以什么方式查找(姓名还是学号);4、选择好查找方式以后,查找到该人信息返回;5、打印信息再次确认是否真的需要删除这些信息;6、删除后返回到主页面菜单函数; 一个删除功能嵌套调用了这么多函数,假如在某个函数中出错了(或者我在第5步取消删除),又要一层层的返回。幸好Linux中提供了se原创 2015-02-28 11:35:21 · 1532 阅读 · 0 评论 -
Linux任务/进程前后台切换
一、 &加在一个命令的最后,可以把这个命令放到后台执行 ,如gftp &,二、ctrl + z可以将一个正在前台执行的命令放到后台,并且处于暂停状态,不可执行 三、jobs查看当前有多少在后台运行的命令jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated,但是如果任务被终止了(kill),shell 从当前转载 2015-03-23 15:51:39 · 26734 阅读 · 0 评论 -
linux环境编程之线程基础知识
/tmp/ccc9R9dJ.o: In function `main':test.c:(.text+0x3c): undefined reference to `pthread_create'collect2: ld returned 1 exit status就很可能是因为编译时没有加-lpthread 选项;原创 2015-06-14 21:46:12 · 1063 阅读 · 0 评论 -
多线程的生产者和消费者问题
多线程的生产者和消费者问题是比较经典的多线程问题,如果知道编码解决生产者和消费者问题,那么对于多线程应该基本算掌握了。我不知道大家的生产者和消费者问题是怎么样的(应该有几个版本吧),这里我说下我的生产者和消费者问题: 有多个生产线程,他们只负责生产资源;有多个消费者,同样他们只负责消费。但是他们需要满足下面条件: 生产者:只有当资源没有的时候,生产者才开始生产,但是为了防止浪费,每次只能生产指定数量的资源。当生产者生产完足够资源时,就进入睡眠,同时叫醒消费者去消费;原创 2015-06-12 14:51:55 · 3198 阅读 · 0 评论 -
linux环境编程之多线程同步
多线程同步,当有多个线程同时访问共享内存时就会产生数据不一致性。所以为了保证数据的一致性必须让线程同步,同步方式有下面几种:互斥量 互斥量从本质上来说是一把锁,在访问共享资源前对互斥量进行加锁,访问完后释放互斥量上的锁。对互斥量加锁后,任何其他的线程对互斥量加锁都会被阻塞,直到互斥量上的锁释放。当锁释放后,阻塞的所有线程都会变成可运行的,然后进行抢占。 互斥原创 2015-06-16 20:46:05 · 1021 阅读 · 0 评论 -
Linux环境编程之信号处理(二、kill()函数)
前一篇有关信号的blog Linux中信号处理(一)中已经大概的分析了信号基本处理方法,已经signal的解析和绑定处理函数;这一篇blog来复习下信号中常用到的几个函数; kill函数将信号发射给指定进程或者进程组,raise函数则把信号发送给自己;raise函数比较好理解,raise(int signo);kill(pid_t pid, int signo)函数就有点复杂了。其实这个函数很类似前面进程中涉及到的 waitpid()函数 Linux中进程控制函数:wait()和wait原创 2015-04-02 14:32:32 · 4074 阅读 · 0 评论 -
Linux环境编程之信号处理(一)
已经有差不多一年没有使用 《unix环境高级编程》中的知识了,现在抽个时间大概的复习下《unix环境高级编程》,也顺便记录下,方便以后再复习使用;信号简介1、信号是软件中断,提供的是一种处理异步事件的方法;2、不存在编号为0的信号,在kill函数中对信号0有特殊应用;3、对信号的处理方法有三种:a、忽略信号,也就是不做任何处理,SIGKILL/SIGSTOP(即:9/19号信号)不能被忽略;b、捕捉信号,也就是调用用户开始设计好的信号处理函数去处理;9/19号信号不能被捕捉;c、系统默认,不做处理,也不设置原创 2015-03-30 11:38:20 · 1018 阅读 · 0 评论 -
Linux环境编程之信号处理(三、利用alarm()和pause()函数实现sleep()函数)
sleep()是执行挂起一段时间,而alarm()函数是定时器,pause()函数则是挂起进程,当出现信号打断时,才会继续往前执行; 先来分享下alarm()函数,alarm()函数用来设置一个定时器,当时间超时时,会产生SIGALRM信号,该信号默认是终止该进程; #include unsigned int alarm(unsigne原创 2015-04-03 14:51:48 · 4534 阅读 · 0 评论