
linux
文章平均质量分 70
纯属虚构
互联网后台开发大数据Linux
展开
-
简单socket【C/S,服务器收文件】
Server:等待连接,有连接进来的时候,就accept,新fork一个子进程,然后read,再将得到的buf存到getpid().txt,父进程继续accept。 Client:连接,然后传送指定文件到Server。Server:s.c #include #include #include #include #include #include #原创 2013-05-17 14:12:29 · 806 阅读 · 0 评论 -
linux多线程 & IPC【10】自己写一个系统日志服务
unix网络编程【13章 posix共享内存区】 中实现了一个简单的日志服务,使用共享内存实现了没有亲缘关系的进程间的通信。这个共享内存是采用内存映射文件的(用shm_open),匿名的共享内存实现有亲缘关系进程间的通信比较方便,没有亲缘关系的就不知道怎么实现了。 折腾了一个晚上加一个上午,终于整出来了。首先是头文件(mylog.h),给出了结构体的定义和一些宏定义:#ifnde原创 2013-05-13 11:25:48 · 929 阅读 · 0 评论 -
linux多线程 & IPC【11】《unix网络编程》的系统日志demo
上一篇自己写的基于共享内存的系统日志服务,有一个缺点就是槽满之后,客户端就阻塞在那里了。当然对于客户端来说,要紧的是去干正事,不是为了打印一行log神经病一样阻塞在这里。所以阻塞不是好的解决方案,应该:【1】分配较大的NMSG【2】服务器响应及时,这样即使消息多,也能很快处理完,不至于积累下来。【3】在槽满时,再有消息来的话,给出overflow 书本上就是用了overflo原创 2013-05-13 14:41:56 · 894 阅读 · 0 评论 -
linux多线程 & IPC【12】System V 共享内存
System V的IPC包括System V消息队列,System V信号量和System共享内存。特征是使用key_t来标志,一般是一个32位的整数,正式说法是一个不小于32位的整数。 没有亲缘关系的进程之间需要约定好一个文件或目录名(反正目录也是文件),以及一个整数值,然后调用ftok()函数返回一个key_t。 key_t类型在中定义。 函数ftok原型为:原创 2013-05-13 22:13:04 · 859 阅读 · 0 评论 -
linux多线程 & IPC【】system V匿名内存共享
在shmget函数中使用 IPC_PRIVATE的场合,发生在具有亲缘关系的进程间通信的场合。#include #include #include #include #include #include #include #include struct st{ sem_t mutex; int value;};int main(){ in原创 2013-05-14 13:32:30 · 848 阅读 · 0 评论 -
总结 共享内存
http://tonybai.com/2005/09/23/apr-shmem/ 匿名共享内存:【1】int N=1024; //大小char *p = mmap(NULL, N, PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED,-1,0);p[0]='A';p[a]='B';...mummap(p,N);原创 2013-05-14 15:37:12 · 806 阅读 · 0 评论 -
疯狂的bug【select -IO复用中】
select版本的回显服务,初期的bug是,客户端可以连接上服务器,但是客户端发送字符串过来以后,服务器的select却阻塞在那里,死活没反映。。。gdb调试查看了fd_set类型的值,也发现的确是有两个值的叠加的——一个是监听套接字,一个是刚刚连接上的客户套接字。这就奇怪了!直到看到 http://bbs.youkuaiyun.com/topics/230024080 上别人的提问,最后他说:解决了,原因是原创 2013-05-28 22:53:04 · 1205 阅读 · 0 评论 -
技巧【1】
【1】do{}while(0)#define cerror(str, n) do{ perror(str); exit(n);}while(0)好处,主要是与if连用的时候,首先,要用{}扩起来,否则可能会出现下列情况:#define cerror(str,n) perror(str); exit(n);if(n>0) cerror(str,n):于是替换以后变成原创 2013-05-30 20:30:56 · 619 阅读 · 0 评论 -
java在Ubuntu下的开发环境搭建
因为hadoop的缘故,要用java,因此总结下安装配置的过程。 注意: 【1】不要用apt-get安装openjdk,会出问题。 【2】也不要用gij之类的东西。。要去oracle网站下载sun的java。 如果已经有了openjdk,用下列命令卸载: sudo apt-get remove openjdk* 1.下载 下载网原创 2013-06-05 17:28:05 · 731 阅读 · 0 评论 -
ubuntu安装libevent2.0.20
1.是否安装安装了的话应该是这样的:如果不是,那就装一下。chen@chen-book1:~/libevent20$ ls -al /usr/lib |grep libeventlrwxrwxrwx 1 root root 21 2013-06-07 10:43 libevent-2.0.so.5 -> libevent-2.0.so.5.1.4-rw-原创 2013-06-07 11:30:25 · 21259 阅读 · 4 评论 -
getopt函数的使用和实例
一。理论 在 “-a a_arg -b b_arg -c”中,选项:-a,-b,-c参数:a_arg,b_arg调用形式:getopt(argc, argv,":ab::c")找了一遍以后返回-1,因此最后总是会返回-1的。a: 选项a后面有参数,可以用一个或者多个空格隔开,也可以不用空格,紧跟着a。即 【-a a_arg】 或者原创 2013-05-13 17:05:53 · 1114 阅读 · 0 评论 -
linux多线程【9】匿名内存映射
上一篇是创建文件,然后再映射到内存,再fork子进程,实现IPC。现在使用匿名内存映射(1)使用/dev/zero文件。(2)形式上没有文件。 先看第一种,由于/dev/zero本来已经存在,因此open的时候不需要第三个参数,第二个参数指定为O_RDWR即可。#include #include #include #include #include #inc原创 2013-05-12 20:28:30 · 2524 阅读 · 0 评论 -
linux多线程【7】mmap的使用
mmap将文件映射到内存中,然后用指针指向内存,就可以方便高效的操作了。 创建文件map_file,长度为256,映射到内存中,然后写入字符串,结束后用cat查看是否写入了。#include #include #include #include #include #include #include #include #include #include #原创 2013-05-12 16:39:44 · 3055 阅读 · 0 评论 -
linux多线程【5】哲学家用餐-另一种思路
以上两篇的思路是:锁定左边的筷子,然后去锁定右边的筷子,要是失败,就把左边的筷子也释放掉。如果不这样的话,万一4个哲学家都已经锁定了左边的筷子,然后最后一个人也锁定了左边的筷子,最后每个人都不释放左边的筷子,而右边的筷子是别人的左边筷子。这不就死锁了吗!但是,如果有一个人是先锁定右边再锁定左边,那么:1:如果他的左边筷子被锁定,说明他的右边筷子已经锁定了,那就可以吃了,就不是死锁了。2:如原创 2013-05-10 11:39:37 · 818 阅读 · 0 评论 -
linux多线程【4】哲学家用餐-sem_t
ref:http://blog.youkuaiyun.com/acceptedxukai/article/details/8307247sem_t信号量,如果信号量取值为1,那么只能有01两种状态,那么不就跟mutex差不多吗。sem_wait和sem_trywait加锁。sem_post解锁。注意初始化的时候:sem_init(&st,0,1);中间的参数如果不是0,表示允许进程原创 2013-05-10 11:23:39 · 1157 阅读 · 0 评论 -
linux 多线程【2】条件变量
条件变量:一个生产者,一个消费者,生产者将变量++,消费者将变量--,但是消费者只能在变量>0时才能--,生产者只能在变量//thread.c#include #include #include #include #include #include #include #include void *func1(void *);void *func2(void *);原创 2013-05-09 22:08:39 · 704 阅读 · 0 评论 -
僵死进程总结
http://bbs.chinaunix.net/thread-820884-1-1.html 什么是僵死进程呢?就是儿子死了,父亲不去收尸,儿子就变成僵尸了。(1)父进程先结束,子进程后结束。父进程结束时,子进程被init收养,成为他的子进程。eg:#include #include #include int main(){ int p; if((p原创 2013-05-24 11:29:58 · 1667 阅读 · 1 评论 -
linux多线程【3】哲学家用餐-mutex实现
ref:http://blog.youkuaiyun.com/kongzhp/article/details/7487150 5跟筷子,5个哲学家,哲学家要吃饭,自然要两根筷子,这样就出现资源争用的情况。哲学家只能用左边和右边的筷子,两根筷子备齐才能吃饭! 使用mutex的话,就是每个筷子一个mutex,需要5个mutex,哲学家先lock左边的筷子,如果有原创 2013-05-10 11:00:02 · 1084 阅读 · 0 评论 -
回射服务器【1单进程】
服务器端:ser.c#include #include #include #include #include #include #include #include #include int main(){ struct sockaddr_in sad; int sfd; int cfd; sfd=socket(AF_INET原创 2013-05-24 21:54:08 · 615 阅读 · 0 评论 -
地址转换
#include#include #include int main(int argc, char *argv[]){ char addr[26]; struct in_addr id; unsigned char *p; int i; if(argc==1) { strcpy(addr,"192.168.1.1"原创 2013-05-26 13:13:32 · 618 阅读 · 0 评论 -
linux多线程【8】mmap实现父子进程的共享内存通信,用信号量同步
1.创建文件。open,ftruncate2.将文件映射到内存。内存首地址存放一个sem_t实现进程的互斥。mmap,sem_init3.创建子进程。父子进程互斥地访问共享内存的内容。fork,sem_wait,sem_post4.取消映射。munmap由于需要同步或者互斥,因此需要sem_t,我们把他放在内存区的开头,那么真正可用的内存就是开头做一定偏移。维护一个指针,使原创 2013-05-12 17:31:51 · 3452 阅读 · 0 评论 -
linux多线程【6】单实例的进程-记录锁的使用
守护进程往往只维护一个实例,再次起一个进程时,检测到已经运行,就不会再运行了。这一点可以由记录锁来完成。#include #include #include #include #include #include #include #include #include #include #define LOCKFILE "/var/run/daemon.pid"#原创 2013-05-12 14:50:05 · 1067 阅读 · 0 评论 -
内核抢占
这里有两个概念,内核抢占与用户态抢占。什么是内核抢占?就是指程序执行系统调用的时候(也就是执行于内核态的时候)被其他内核线程抢占走了。有2种情况是不会也不应该被抢占的: 1. 内核正在执行中断处理函数 2. 内核处于临界区。正在执行自旋锁。除了以上情况以外,就可能被抢占了。如何知道当前是否为抢占系统vim /boot/config-3.10.0-123.9.3.el7.x86_64 查看相应原创 2016-01-03 16:52:34 · 3528 阅读 · 0 评论