- 博客(37)
- 资源 (9)
- 收藏
- 关注
原创 技巧【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 606
原创 ubuntu11.10安装Lua
1、下载lua的源码包,地址如下,最新版本5.1.2。http://www.lua.org/ftp/lua-5.1.2.tar.gz2、下载libreadline相关支持。sudo apt-get install libreadline5sudo apt-get install libreadline-gplv2-dev3.make linuxsudo make i
2013-05-30 00:19:18 655
转载 Proxy源代码分析--谈谈如何学习linux网络编程
本文出自:http://www.china-pub.com 作者:李培源 (2001-08-10 12:00:00) Linux是一个可靠性非常高的操作系统,但是所有用过Linux的朋友都会感觉到,Linux 和Windows这样的"傻瓜"操作系统(这里丝毫没有贬低Windows的意思,相反这应该是 Windows的优点)相比,后者无疑在易操作性上更胜一筹。但是为什么又有那么多的
2013-05-29 09:54:12 844
原创 疯狂的bug【select -IO复用中】
select版本的回显服务,初期的bug是,客户端可以连接上服务器,但是客户端发送字符串过来以后,服务器的select却阻塞在那里,死活没反映。。。gdb调试查看了fd_set类型的值,也发现的确是有两个值的叠加的——一个是监听套接字,一个是刚刚连接上的客户套接字。这就奇怪了!直到看到 http://bbs.csdn.net/topics/230024080 上别人的提问,最后他说:解决了,原因是
2013-05-28 22:53:04 1171
转载 Linux线程池
转自:http://hi.baidu.com/boahegcrmdghots/item/f3ca1a3c2d47fcc52e8ec2e1一个Linux下C线程池的实现 什么时候需要创建线程池呢?简单的说,如果一个应用需要频繁的创建和销毁线程,而任务执行的时间又非常短,这样线程创建和销毁的带来的开销就不容忽视,这时也是线程池该出场的机会了。如果线程创建和销毁时间相比
2013-05-27 09:40:02 639
原创 地址转换
#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 605
原创 回射服务器【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 603
原创 僵死进程总结
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 1649 1
原创 数组:奇数在前,偶数在后,要求顺序不变
不要求顺序:http://zhedahht.blog.163.com/blog/static/25411174200741295930898/要求顺序:http://blog.sina.com.cn/s/blog_5163a02d0101b6u6.html1.不要求顺序一个数组,如[3,5,2,4,6,8,9,32,1],有奇数有偶数,要求把所有奇数放在前面,偶数放在后
2013-05-22 22:41:11 2395
原创 linux文件系统
ext2 : 早期linux中常用的文件系统ext3 : ext2的升级版,带日志功能RAMFS : 内存文件系统,速度很快NFS : 网络文件系统,由SUN发明,主要用于远程文件共享MS-DOS : MS-DOS文件系统VFAT : Windows 95/98 操作系统采用的文件系统FAT : Windows XP 操作系统采用的文件系统NTFS : Windows
2013-05-21 21:12:21 564
原创 共享内存【1】
共享内存总结: http://www.embedu.org/Column/Column250.htm用tmpfs的例子: http://www.chinaunix.net/old_jh/4/243074.htmlrandisk写得很全: http://linux.chinaunix.net/techdoc/beginner/2008/01/29/977725.shtml性能测试:
2013-05-21 15:07:53 592
原创 open的UNBLOCK模式
#include #include #include #include int main(){ int f1,f2;int n=0; char p[34]; int h=0; f1=dup(0);//open(0,O_RDWR|O_CREAT|O_NONBLOCK,0666); while(h<10) { n=r
2013-05-21 13:15:05 618
原创 汉诺塔
#include #include typedef int T;#define NUM 4struct stack{ int size; int index; T *head;};int init(struct stack *p, int n);void destroy(struct stack *p);int get_size(struct stack *p);
2013-05-19 10:30:14 533
原创 美丽字符串
不计大小写,每个字母都有一个“美丽程度”,是1-26之间的数值,一一对应,具体字母与数字的对应关系未知,给定一个字符串,求其可能的最大美丽程度。统计频率,排序,频率大的分配26,第二大的分配25,。。。#include #include #include #include int bety(const char *str);int cmp(const void*p1,
2013-05-18 21:09:29 2374
原创 facebook题
#include #include #include #include double get(int iC, int iB, int iP);int main(){ int n; scanf("%d", &n); int *pi = (int*)malloc(n*sizeof(int)); int ind=0; int n1=n; while(n--) { int
2013-05-18 20:39:04 564
原创 信号总结
信号集:sigset_t每个进程有一个信号屏蔽字,想象成每个进程维护了这样一个sig_set的全局变量吧。在这个变量中被set的信号,如果发送给该进程,那么进程不会收到,信号会被阻塞,状态为pending(未决)。如果后来解除了pending,那么进程就会收到了。首先要对信号集变量进行设置:sigset_t sst;sigemptyset(&sst)sigfills
2013-05-18 15:25:24 720
原创 数组峰值
#include int findd(int *p, int a, int b);int main(){ int ar[] = {1,2,3,5,7,8,9,7,5,3,2,0}; int x = findd(ar, 0, sizeof(ar)/sizeof(int)-1); printf("p[%d] = %d\n", x, ar[x]); return 0
2013-05-17 22:27:28 1087
原创 实现整数加法
int addd(int a, int b){ if((b&a)==0)return a^b; else return addd(a^b, (a&b)<<1);}administrator@ubuntu:~/test/net/new$ ./t 5 7 5+7=12administrator@ubuntu:~/test/net/new$ ./t 5 795
2013-05-17 15:44:12 508
原创 简单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 794
原创 缓冲
1.setbuf和setvbuf1.1 setbuf改变stdout的行为 标准输出通常是行缓冲的,也就是遇到\n或者缓冲区满时才执行IO: #include #include int main(){//setbuf(stdout,NULL); printf("ASD");sleep(1);printf("__\n"); return 0;}执行的时
2013-05-15 01:11:58 669
原创 信号【1】ALRM
#include #include #include #include void myfunc(int i);int main(int argc, char *argv[]){ int ret1,ret2; if (argc>1) { if(atoi(argv[1])!=0) { if (si
2013-05-14 22:13:09 667
原创 总结 共享内存
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 776
原创 linux多线程 & IPC【】open和shm_open
#include #include #include #include #include #include #include #include char *name = "test";int main(int args, char **argv){ char *p; int f; unlink(name); f = open(name, O_RDWR | O_CREAT|O_EXCL, 0666)
2013-05-14 14:27:12 1947
原创 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 831
原创 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 843
原创 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 1062
原创 linux多线程 & IPC【11】《unix网络编程》的系统日志demo
上一篇自己写的基于共享内存的系统日志服务,有一个缺点就是槽满之后,客户端就阻塞在那里了。当然对于客户端来说,要紧的是去干正事,不是为了打印一行log神经病一样阻塞在这里。所以阻塞不是好的解决方案,应该:【1】分配较大的NMSG【2】服务器响应及时,这样即使消息多,也能很快处理完,不至于积累下来。【3】在槽满时,再有消息来的话,给出overflow 书本上就是用了overflo
2013-05-13 14:41:56 875
原创 linux多线程 & IPC【10】自己写一个系统日志服务
unix网络编程【13章 posix共享内存区】 中实现了一个简单的日志服务,使用共享内存实现了没有亲缘关系的进程间的通信。这个共享内存是采用内存映射文件的(用shm_open),匿名的共享内存实现有亲缘关系进程间的通信比较方便,没有亲缘关系的就不知道怎么实现了。 折腾了一个晚上加一个上午,终于整出来了。首先是头文件(mylog.h),给出了结构体的定义和一些宏定义:#ifnde
2013-05-13 11:25:48 903
原创 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 2476
原创 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 3422
原创 linux多线程【7】mmap的使用
mmap将文件映射到内存中,然后用指针指向内存,就可以方便高效的操作了。 创建文件map_file,长度为256,映射到内存中,然后写入字符串,结束后用cat查看是否写入了。#include #include #include #include #include #include #include #include #include #include #
2013-05-12 16:39:44 3012
原创 linux多线程【6】单实例的进程-记录锁的使用
守护进程往往只维护一个实例,再次起一个进程时,检测到已经运行,就不会再运行了。这一点可以由记录锁来完成。#include #include #include #include #include #include #include #include #include #include #define LOCKFILE "/var/run/daemon.pid"#
2013-05-12 14:50:05 1053
原创 linux多线程【5】哲学家用餐-另一种思路
以上两篇的思路是:锁定左边的筷子,然后去锁定右边的筷子,要是失败,就把左边的筷子也释放掉。如果不这样的话,万一4个哲学家都已经锁定了左边的筷子,然后最后一个人也锁定了左边的筷子,最后每个人都不释放左边的筷子,而右边的筷子是别人的左边筷子。这不就死锁了吗!但是,如果有一个人是先锁定右边再锁定左边,那么:1:如果他的左边筷子被锁定,说明他的右边筷子已经锁定了,那就可以吃了,就不是死锁了。2:如
2013-05-10 11:39:37 797
原创 linux多线程【4】哲学家用餐-sem_t
ref:http://blog.csdn.net/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 1135
原创 linux多线程【3】哲学家用餐-mutex实现
ref:http://blog.csdn.net/kongzhp/article/details/7487150 5跟筷子,5个哲学家,哲学家要吃饭,自然要两根筷子,这样就出现资源争用的情况。哲学家只能用左边和右边的筷子,两根筷子备齐才能吃饭! 使用mutex的话,就是每个筷子一个mutex,需要5个mutex,哲学家先lock左边的筷子,如果有
2013-05-10 11:00:02 1057
原创 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 680
原创 linux多线程【1】demo
不使用多线程同步,对全局整数进行++和打印操作://thread.c#include #include #include #include #include #include #include #include void *func(void *);int g_a=0;pthread_mutex_t t1;int main(){ pthread_t pt1,pt
2013-05-09 20:02:59 641
相关向量机(RVM)论文6篇
2011-12-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人