Submitted by gouki on 2013, August 27, 10:42 PM
因为最近在写点东西遇到了这方面的问题。所以关注了一下,这段内容是摘抄来的。因为以前用PHP的时候,一般就是shm_attach/msg_get_queue/ 管道等
有些东西不是特别熟,所以记录下来做笔记
Linux下进程间通信大致有以下几种:(来自:http://golang.usr.cc/blog-1403-3071.html)
- 1.socket
- 2.管道(包括匿名管道适用于父子进程,命名管道)
- 3.信号量
- 4.共享内存
- 5.消息队列
-
- 1.socket
- socket可以用于本地进程间通信也可以用于远程间,是最常用的。
- 2.管道--匿名管道
- 一般用pipe创建,在父子间通信。在父进程中关闭读/写管道,在子进程中关闭写/读管道。
- 2.管道--命名管道
- 一般用mkfifo来创建。如果没有说明管道是非阻塞的,那么一个为读打开的管道将阻塞直到有进程为写打开此FIFO。同样如果为写打开的管道将阻塞直到有进程为读打开此FIFO。
- 3.信号量
- 一个进程可以用kill发送信号至另外一个进程。
- 4.共享内存
- 使用函数:shmget、shmat、shmctl、shmdt
- 用shmget函数得到一块内存,并用shmat设置为允许本进程使用这块共享内存。使用完以后用shmdt删除内存块。
- 5.消息队列
- 使用函数:msgget、msgsnd、msgrcv、msgctl
- 使用步骤同上。
Linux | 评论:0
| 阅读:15642
Submitted by gouki on 2013, August 27, 1:01 PM
自从GAE出来后。什么SAE,ACE,BAE什么什么的就全部出来了
ACE我跑几个程序一直有问题,禁用了一些函数,所以我最近在看BAE。速度也不错,也能绑域名。所以它就成了首选。但BAE有一个坑 需要注意
如果你的程序的上传没有改过。那么一般都是上传在自己当前的项目目录里,而这个目录由于没有经过svn上传,所以它并不在版本库里,因此,一旦碰到BAE来一个svn迁移的事件。或者更新的时候,极有可能你上传的那些附件会全部丢失。
慎重。我就觉得BAE就象一个实验室。我们上传代码到BAE的svn库里。然后svn库会自动 checkout到BAE的平台。于是。。如果他们要迁移了。这些数据应该都是直接delete。然后再checkout一份。
建议找个程序,上传到BAE自带的存储中(就象sae的存储)。
Tags: bae
PHP | 评论:0
| 阅读:15651
Submitted by gouki on 2013, August 26, 12:12 PM
这个暑假,带了小朋友看了几部电影,但我估计印象最深 的可能就是这个怪兽大学了
我爱灰太狼,说实话,不好看,反正小朋友看了一会就在问我,还有多久结束
开心超人,做的还行吧,但是有个很大的问题,很多笑点都是成人才能看得懂的。比如微博转发数,还有一些关于社会的冷笑话(房奴)之类的。小孩子们根本就不懂啊。
然后就是这个怪兽大学了,固然是3D对他来说是新鲜玩意,但是那些逼真的效果以及徐峥等的配音,都确实让人觉得,他们的配音是用心了的。不得不说,皮克斯的3D真心强。太TMD逼真了。对比起国内的那些3D,纯粹是在糟蹋3D
除此之外,自己就看了一个所谓4D版的环太平洋,我老婆就说了,这明显是奥特曼+钢铁侠嘛。第一次在环球港看这种片子,觉得很新鲜,但。。真心不建议看4D吃爆米花,毕竟谁也不知道什么时候就会有水突然漂出来。
当然更值得幸运的是,我们去的时候没遇上砍人,我们是安全的。(欲知砍人情况,请搜索:环球港 砍人)
怪兽大学我就不多剧透,值得一看。成人也OK
Misc | 评论:0
| 阅读:13142
Submitted by gouki on 2013, August 22, 10:55 PM
转的文章。主要是因为经常会用curl来抓取数据。而且几乎是http_get和http_post混用。但我没遇上这个BUG。不清楚以后会不会遇上,所以我先记录一下,以防万一遇到时候不知道怎么做。
原文地址来自:http://www.ideawu.net/blog/archives/622.html
重用一个CURL句柄时, 发现curl_setopt($ch, CURLOPT_HTTPGET, TRUE) 不起作用. 期望在调用这条语句之后发起请求, 应该发送的是GET, 但看服务器log, 却使用了和前一次请求相同的HTTP方法.
PHP脚本:
<?php $url = 'http://www.ideawu.net/'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_exec($ch); curl_setopt($ch, CURLOPT_HTTPGET, true); // 错误! BUG curl_exec($ch); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); // 正确 curl_exec($ch); ?>
web server log:
124.127.130.50 "2011-10-12 18:55:09" "POST / HTTP/1.1" 200 3516 "-" www.ideawu.net 124.127.130.50 "2011-10-12 18:55:09" "POST / HTTP/1.1" 200 3516 "-" www.ideawu.net 124.127.130.50 "2011-10-12 18:55:09" "GET / HTTP/1.1" 200 3516 "-" www.ideawu.net
这个BUG目前还没找到相关的资料.
补充: 不仅仅是CURLOPT_HTTPGET, CURLOPT_POST也有同样的问题. 所以, 结论是: 只有CURLOPT_CUSTOMREQUEST才是正确的方法.
Tags: curl
PHP | 评论:0
| 阅读:14770
Submitted by gouki on 2013, August 21, 9:46 PM
在用go写程序的时候,遇到了一点点的事情。记录了下来
1、字符串转[]byte,网上有代码:MakeSlice(这是一个函数),也可以直接[]byte(string)
2、byte转字符串,这个就比较简单了 string([]byte)
3、byte转int。这时候就只能用 binary.Read(bytes.NewBuffer(buf[0:4]),binary.BigEndian, &outdata )
4、conn.Read的时候。如果我知道了剩下数据的长度时,我想 var x [len]byte,但这样会报错,out of array size,所以,经过指点是可以 x:=make([]byte,len),当然也可以x:=make([]byte,0,len),这里面其实就是Cap和len的关系了
---分隔线
对于上述第3点,群里的Larry说,其实可以通过binary.BigEndian.Uint32(buf[0:4])来转换。试了一下,果然可以,而且这样做之后,连bytes包也不用加载了。
再看了下文档,原来 binary.BigEndian implents ByteOrder,而ByteOrder这个struct有几个方法:
XML/HTML代码
- type ByteOrder interface {
- Uint16([]byte) uint16
- Uint32([]byte) uint32
- Uint64([]byte) uint64
- PutUint16([]byte, uint16)
- PutUint32([]byte, uint32)
- PutUint64([]byte, uint64)
- String() string
- }
实在太实用了
Go | 评论:0
| 阅读:14645