摘要:
Protocol buffer是google开源的又一利器,主要用于结构化数据存储与数据交换,类似于XML,但相比XML,它更小、更快、也更简单,只需使用protobuf对数据结构进行一次描述,即可利用各种不同的语言(包括C++、java、python等,同时还包括很多种语言的绑定插件)从各种不同的数据流(文件、字符串流等)对结构化数据轻松读写。但由于其使用二进制存储,相比XML,其可读性差。 ... 阅读全文
posted @ 2013-04-19 14:10
ydzhang
阅读(4194)
评论(0)
推荐(0)
摘要:
在google搜索框中输入“开放平台”,搜索结果中包括百度开放平台、淘宝开放平台、腾讯开放平台、人人开放平台、新浪微博开放平台等,都是国内数一数二的大公司,那么到底什么是开放平台呢,这些IT大佬们为什么都要做开放平台呢。 开放平台在百度百科中的定义是:开放平台是指软件系统通过公开其应用程序编程接口(API)或函数(function)来使外部的程序可以增加该软件系统的功能或使用该软件系统的资源,... 阅读全文
posted @ 2013-04-19 14:10
ydzhang
阅读(612)
评论(0)
推荐(0)
摘要:
昨天参加阿里巴巴的笔试,有一道题目要求从N个面试的人中挑选出M个成绩最好的人(M<=N, 并假定M个人的成绩都不一样),求挑选程序的最优时间复杂度()。
选项包括:O(NlogN), O(N*min(M, logN)), O(N*logM), O(N)。 O(NlogN)的算法是完全有可能的,使用堆排序,快速排序等将N个元素排序,选取前M个元素即可。 O(N*logM)的算法也是有可能的,将前... 阅读全文
posted @ 2013-04-19 14:10
ydzhang
阅读(248)
评论(0)
推荐(0)
摘要:
fuse内核模块被加载时,以下初始化例程会被调用,见fuse_init函数<inode.c>。
1. fuse_fs_init(); 注册fuse文件系统,创建fuse_inode高速缓存。
2. fuse_dev_init(); 创建fuse_req高速缓存,加载fuse设备驱动,用于用户空间与内核空间交换信息。
3. fuse_sysfs_init(); 在/sys/fs目录下增加fuse节点... 阅读全文
posted @ 2013-04-19 14:10
ydzhang
阅读(1670)
评论(0)
推荐(0)
摘要:
1. 打印错误信息
如果程序的执行必须要求某个宏被定义,在检查到宏没有被定义是可以使用#error,#warning打印错误(警告)信息,如:
#ifndef __unix__#error "This section will only work on UNIX systems"#endif
只有__unix__宏被定义,程序才能被正常编译。 2. 方便调试
__FILE, __LINE, __... 阅读全文
posted @ 2013-04-19 14:10
ydzhang
阅读(220)
评论(0)
推荐(0)
摘要:
xinetd是inetd超级服务器的升级版,相当于inetd + tcp wrapper,将服务管理与访问控制结合在一起。在介绍inetd之前,先看一个xinetd的实例(我的机器上只有xinetd,关于inetd的配置参考UNP 325页)。 xinet配置实例 为xinetd添加myecho服务(将客户端发来的请求消息回送给客户端)。 1. 在/etc/services中添加myec... 阅读全文
posted @ 2013-04-19 14:10
ydzhang
阅读(344)
评论(0)
推荐(0)
摘要:
getaddrinfo是在gethostbyname系列函数不支持Ipv6的情况下逐渐催生的,其能够处理名字到地址以及服务到端口这两种转换,返回一个sockaddr结构的链表,这些sockaddr地址结构随后可有套接口函数(socket、bind、connect、listen等)直接调用,将协议相关性隐藏在该函数内部。应该尽量选择使用getaddrinfo函数代替之前的getxx函数族,就像应该使... 阅读全文
posted @ 2013-04-19 14:10
ydzhang
阅读(1791)
评论(0)
推荐(1)
摘要:
1. 重用已使用的地址 问题描述:在刚刚关闭了测试程序后,再启动服务器时提示bind失败,返回错误EADDRINUSE。 原因分析:套接字(主动关闭一端)在关闭套接字后会停留在TIME_WAIT状态一端时间,由于我在同一机器上同时运行客户端与服务器,故服务器在重新启动执行bind时,可能上次关闭连接还没有完成,连接依然存在,故bind失败。通过设置套接口的SO_REUSEADDR可重用已绑定的... 阅读全文
posted @ 2013-04-19 14:10
ydzhang
阅读(149)
评论(0)
推荐(0)
摘要:
实线:表示客户的正常状态转换 虚线:表示服务器的正常状态装换 应用:表示状态转换在应用进程发起操作时发生 接受:表示状态转换在接受到分节时发生 发送:表示这个转换发送什么 三次握手建立连接 服务器调用socket、bind、listen来完成,即执行被动打开,准备好接受外来的请求。 1.客户端发调用connect发送SYN分节(同步),它告诉服务器客户将在连接中发送的数据的初始... 阅读全文
posted @ 2013-04-19 14:10
ydzhang
阅读(262)
评论(0)
推荐(0)
摘要:
1. read系统调用 测试程序:客户端向服务器端(tcp)发送一个”hello”字符串,服务器端读取并echo到客户端。 服务器端主要代码: char buf[4096]; int r = tcp_readn(sock, buf, 4096); int w = tcp_writen(sock, buf, r); 客户端主要代码: char buf[4096]; int w... 阅读全文
posted @ 2013-04-19 14:10
ydzhang
阅读(337)
评论(0)
推荐(0)
浙公网安备 33010602011771号