
linux/unix程序设计
文章平均质量分 74
huangyekan
这个作者很懒,什么都没留下…
展开
-
消息队列和信号量
程序的实现是两个进程,通过信号量来实现通信,发送方先request发送方的信号量,然后发送,然后再release接收方信号量,这样可以通知接手方可以接收了,接受方接收以后再通过信号量通知发送方,一直这样循环,直到发送方发送"exit"双方才能退出进程。数据的传送是通过消息队列传送的。具体对函数的介绍和实现方法这里就不多说了,信号量和消息队列的知识点还是有点多的,可以参考《linux程序设计原创 2012-08-02 23:10:07 · 5837 阅读 · 0 评论 -
进程间的通信
进程间的通信就麻烦一些了,信号的种类就有64种,可以在终端中输入kill -l查看!就先说几个今天刚学的吧1.SIGINT,这个信号是由硬件产生的,比如按下ctrl+c时就会产生这个信号。2.SIGALRM,这个信号是由alrm(unsigned int arg)函数产生的,就是间隔arg秒时间后产生SIGALRM信号。3.SIGCHLD.子进程退出时会产生这个信号。信原创 2012-07-31 23:15:11 · 1407 阅读 · 0 评论 -
linux线程间用信号量通信
原来总是用互斥锁(MUTEX)和环境变量(cond)去控制线程的通信,用起来挺麻烦的,用信号量(SEM)来通信控制就方便多了!用到信号量就要包含semaphore.h头文件。可以用sem_t类型来声明一个型号量。用int sem_init(sem_t *sem, int pshared, unsigned int value)函数来初始化型号量,第一个参数就是用sem_t声明的信号量,原创 2012-07-31 22:02:18 · 4402 阅读 · 0 评论 -
今天刚学的,linux多线程编程
今天学的是多线程编程,下面是一个典型的例子。学的东西时间久了总会忘,写下来是最好的办法,以后一看就记起来了!程序的实现是写入数据到buf中,然后在终端显示,直到输入exit退出为止。#include #include #include #define BUFSIZE 128pthread_mutex_t mutex;pthread_cond_t cond;char b原创 2012-07-30 22:42:01 · 1662 阅读 · 0 评论 -
fork 父进程与子进程的数据是完全独立的
以下问题是我在实际中遇到的,把它简短的表达为以下代码!int flag = 1;int main(){ pid_t pid; do{ pid = fork(); if (pid == 0)//process of child {原创 2012-07-30 22:03:58 · 1190 阅读 · 0 评论 -
Linux 的僵尸(zombie)进程
可能很少有人意识到,在一个进程调用了exit之后,该进程 并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构。在Linux进程的5种状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所 有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集,除此之外,僵尸进程不再占有 任何内存空间。僵尸进程的来由,要追溯到Unix转载 2012-07-26 22:27:51 · 858 阅读 · 0 评论 -
UNIX程序设计中fork和vfork,exit和_exit的区别
创建子进程有很多种方式,调用fork()和vfork()是其中的两种方式就说说fork和vfork的不同之处吧。fork:父进程调用完fork成功以后创建一个子进程,而且这个子进程会拷贝一份父进程的数据空间,堆和栈空间。并且父子进程的内存空间是完全独立的,并不共享。父进程和子进程谁先执行是不确定的。vfork:父进程调用完vfork后同样创建一个子进程,但是不同之处在于原创 2012-08-11 17:56:26 · 2583 阅读 · 0 评论 -
一个 fork 的面试题
前两天有人问了个关于Unix的fork()系统调用的面试题,这个题正好是我大约十年前找工作时某公司问我的一个题,我觉得比较有趣,写篇文章与大家分享一下。这个题是这样的:题目:请问下面的程序一共输出多少个“-”?#include #include #include int main(void){ int i; for(i=0; i<2; i++){ f转载 2012-08-05 21:17:24 · 1582 阅读 · 0 评论 -
LINUX网络编程之套接字
套接字可以让LINUX在网络上通信,用起来就像管道一样,当然管道都是单向的,套接字既能写也能收!以下是多客户服务器代码:#include #include #include #include #include #include #include #include #define PORT 6000#define SIZE 256static vo原创 2012-08-04 18:16:56 · 813 阅读 · 0 评论 -
linux程序设计SELECT系统调用
最近刚学了linux网络编程里的套接字,然后也写了简单的客户端和服务器之间连接互相读写的简单程序,一直用轮询的方式进行读写,觉得那样客户端和服务器就一直在占用CPU资源,觉得很浪费CPU资源,之前在同一台机上学过用信号量去控制几个个进程或几个线程间的读写与等待,可是现在是两台机器间的通信,之前的信号量就用不上了,翻了翻书,找到SELECT这个函数,可以解决问题。select这个函数可以设置读写原创 2012-08-04 15:30:41 · 1538 阅读 · 0 评论 -
c++类模板
如果要比较两个数的大小,比如要比较两个整型数的大小可以这样写个类:class Compare_int{ public: Compare_int(int arg1, int arg2):number1(arg1),number2(arg2){} int max() {原创 2012-08-20 23:12:39 · 734 阅读 · 0 评论