技术宅,fat-man

增加语言的了解程度可以避免写出愚蠢的代码

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

06 2012 档案

O_APPEND:原子操作
摘要:当多个进程打开同一个文件写入日志的时候,OPEN时指定了O_APPEND参数,UNIX能保证这个操作是原子的,程序不需要自己加锁/*log1.c*/#include<stdio.h>#include<string.h>#include<fcntl.h>#include<unistd.h>int Max = 300;int main(){ int i; int fd; fd = open("1.log",O_WRONLY | O_APPEND); for(i=0;i<Max;i++) { char msg[100]; sp 阅读全文

posted @ 2012-06-28 00:44 codestyle 阅读(878) 评论(0) 推荐(0) 编辑

EVERNOTE基于Thrift打造开放API接口
摘要:http://www.openapis.net/Help.EVERNOTEbaseThriftdzopenAPI.ashx在2007年当我们开始计划Evernote服务的时候,我们就知道在发布服务的那一天就需要同时支持瘦客户端(象浏览器)和胖客户端。这一点促使我们在设计web用户界面之前就开始思考远程协议和客户端访问API接口,而不是拖到几个月之后将API接口架在已经存在网站服务上。我们的应用对API访问接口提出了下面的需求:1、跨平台。当我们08年2月份发布的时候,我们产品代码有服务器端JAVA、客户端是Win32(包括WinMobile) C++、客户端Obj-C Cocoa。2、二进制数 阅读全文

posted @ 2012-06-18 13:49 codestyle 阅读(666) 评论(0) 推荐(0) 编辑

转:C语言中time_t数据类型详细介绍
摘要:原文:http://www.eefocus.com/xuefu2009/blog/10-03/187348_f456a.html包含文件:#ifndef__TIME_T#define__TIME_T /*避免重复定义time_t*/typedef long time_t; /*时间值time_t 为长整型的别名*/#endif既然time_t实际上是长整型,到未来的某一天,从一个时间点(一般是1970年1月1日0时0分0秒)到那时的秒数(即日历时间)超出了长整形所能表示的数的范围怎么办?对time_t数据类型的值来说,它所表示的时间不能晚于2038年1月18日19时14分07秒。为了能够表示更 阅读全文

posted @ 2012-06-14 13:37 codestyle 阅读(909) 评论(0) 推荐(0) 编辑

apue源码编译
摘要:http://www.apuebook.com/可以下载源码src.tar.gz修改配置文件编辑源码解压生成的apue.2e文件夹下的Make.defines.linux修改WKDIR=/home/var/apue.2e为你的apue.2e目录,比如我的apue源码解压在/usr/local,那我就改为:WKDIR=/usr/local/apue.2e然后进入apue.2e/std 目录,编辑linux.mk。修改里面所有的nawk为awk。最后返回apue.2e目录,执行make命令。解决编译错误getenv1.c:4: error: ‘ARG_MAX’ undeclared here (n 阅读全文

posted @ 2012-06-11 15:14 codestyle 阅读(581) 评论(0) 推荐(0) 编辑

【转】如何安装rabbitmq-c-aafba2c665b5这个版本的rabbitmq-c
摘要:http://hi.baidu.com/snowhilloldman/blog/item/a26830dd76b768205882dd30.html照理安装一个库这么简单的东东不应该写一篇垃圾文章,只是,我的真的很痛苦,希望看官们理解!先下载这个库吧:(点了以后文件名会自动变成rabbitmq-c-aafba2c665b5.tar.gz)http://hg.rabbitmq.com/rabbitmq-c/archive/tip.tar.gz这个库的最后更新时间是2010-04-20,姑且命名其版本为:rabbitmq-c-20100420再下载另一个库:(点了以后文件名会自动变成rabbitm 阅读全文

posted @ 2012-06-11 14:35 codestyle 阅读(282) 评论(0) 推荐(0) 编辑

python读写命名管道
摘要:apue里说匿名管道只能在父子进程里使用。如果两个没有关系的进程要通信,就只能使用命名管道,最简单的代码这里:pwrite.pyimport osfd = os.open('pipetest',os.O_NONBLOCK | os.O_CREAT | os.O_RDWR)os.write(fd,"hello")pread.pyimport osfd = os.open('pipetest',os.O_RDONLY)s = os.read(fd,5)print s 阅读全文

posted @ 2012-06-11 14:30 codestyle 阅读(4832) 评论(0) 推荐(0) 编辑

python使用amqp的例子
摘要:web程序需要给IPHONE手机推送消息,移动端同事写好了一个LIB,但是这个LIB使用的是阻塞IO,在APPLE服务器返回前程序是阻塞的,他们用了多线程来解决这个问题,但是webpy运行在apache里,无法进行线程管理,所以就迫切需要一个异步的机制来解决这个问题,希望做到需要发送消息时。调用一个函数,把数据扔进管道或者消息队列后就立即返回,也不管数据是否真的出去了,它相当于生产者,再有一个程序从管道或者队列中读取,进行实际的发送,相当于消费者但是python似乎只封装了IPC(UNIX/LINUX平台进程通信规范)的匿名管道,命名管道的API,并无消息队列,而且管道似乎不易操作,因此想使用 阅读全文

posted @ 2012-06-11 12:37 codestyle 阅读(3438) 评论(1) 推荐(1) 编辑

消息队列:amqp 以及ubuntu安装命令(apt-get)
摘要:(一)基本概念RabbitMQ是流行的开源消息队列系统,用erlang语言开发。我曾经对这门语言挺有兴趣,学过一段时间,后来没坚持。RabbitMQ是AMQP(高级消息队列协议)的标准实现。如果不熟悉AMQP,直接看RabbitMQ的文档会比较困难。不过它也只有几个关键概念,这里简单介绍。RabbitMQ的结构图如下:几个概念说明:Broker:简单来说就是消息队列服务器实体。Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。Queue:消息队列载体,每个消息都会被投入到一个或多个队列。Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。Ro 阅读全文

posted @ 2012-06-11 12:19 codestyle 阅读(963) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示