ftok函数 php,php坑:ftok
最近有个小需求,需要php程序和服务器程序之间进行一些简单通信。调研了几个进程间通信的技术,选择了消息队列方式。
消息队列技术本身不复杂,无非就是生成一个ID,然后使用该ID发送消息或者接受消息。在C程序中,使用ftok来生成ID,而php同样提供了相同名字的函数。因此,在php代码中,想当然地写下了类似语句:
$key_t = msg_get_queue(ftok("/home", 2));
让人惊讶的是,C程序始终接受不到php发送的消息。百思不解之下,使用命令查看系统的消息队列情况:
ipcs -q
结果表明php程序的确在发送消息,只是php的消息队列ID与C程序的消息队列ID居然是不一致的。重新翻看了php的手册,对ftok函数是这么描述的:
int ftok ( string $pathname , string $proj )
值得注意的是:第二个参数居然是字符串型。而在C函数中,该参数定义为int型:
key_t ftok(const char *pathname, int proj_id);
因此,在php代码中,当我们传递整数2给函数ftok时,php转换成了字符‘2’,也就是说,上述示例的php代码实际相当于以下语句:
$key_t = msg_get_queue(ftok("/home", '2'));
导致最终的计算结果与C函数不一致。修改方式也简单,在C程序中,将第二个参数修改为0x32,与php一致即可。
无法理解php为什么将第二个参数改成字符串型,实在是多此一举,而且毫无意义。
ftok函数 php,php坑:ftok相关推荐
- key_t键和ftok函数
目录 `key_t键`.`ftok函数` key_t键.ftok函数 key_t ftok(const char *pathname, int proj_id); 功能:通过ftok返回的是根据文件( ...
- linux环境编程-- ftok()函数
系统建立IPC通讯(如消息队列.共享内存时)必须指定一个ID值.通常情况下,该id值通过ftok函数得到. ftok原型如下: key_t ftok( char * fname, int id ) f ...
- ftok file php,Linux和PHP中的ftok函数返回值不一致问题跟踪
在IPC中中,我们经常事情ftok函数来获取key,来作为获取消息队列id.共享存储标识和信号量ID.在项目中使用了php进程和linux进程通信,采用了消息队列的方式,但是结果表现为php中的fto ...
- key_t IPC键和ftok函数详解和剖析
统建立IPC通讯(如消息队列.共享内存时)必须指定一个ID值.通常情况下,该id值通过ftok函数得到. ftok原型如下: key_t ftok( char * fname, int id ) fn ...
- key_t键和ftok函数(转)
key_t键 System V IPC使用key_t值作为它们的名字,在Redhat linux(后续验证默认都在该平台下)下key_t被定义为int类型,追溯如下: /usr/include/sys ...
- linux ftok函数
系统建立IPC通讯(如消息队列.共享内存时)必须指定一个ID值.通常情况下,该id值通过ftok函数得到. ftok原型如下: key_t ftok( char * fname, int id ) f ...
- linux C -- ftok函数
链接: linux C学习目录 原文链接:https://blog.csdn.net/u013485792/article/details/50764224 关于ftok函数,先不去了解它的作用来先说 ...
- ftok函数的作用:
ftok函数的作用: 系统建立IPC通讯(如消息队列.共享内存时)必须指定一个ID值.通常情况下,该id值通过ftok函数得到. ftok原型如下: key_t ftok( char * fname, ...
- 【IPC通信】key_t键和ftok函数
System V IPC分为三种: System V消息队列 System V信号量 System V共享内存区 这三种类型的IPC使用key_t值做为它们的名字.key_t这个数据类型在<sy ...
最新文章
- 01 多线程概念及其实现方式
- css如何让图片不平铺,css怎么设置图片平铺方式?
- nginx 只允许/不允许 其他域名直接访问
- ActiveMQ网络连接
- 防止抓取html代码,网页中用html代码注释的内容会被抓取吗
- python去掉字符串最外侧的引号_疯狂Python讲义第二章读书笔记
- HOWTO:将 IOCTL 发送到筛选器驱动程序
- php中ci框架分页,Codeigniter(CI)框架分页函数及相关知识
- 传导、辐射和谐波总结,大家共同学习
- HTML5快速设计网页
- 基因重组-冲刺日志(第八天)
- Third season seventeenth episode,Ross and Rachel can not stay at one place???
- 中文分词词库汇总(一)
- Android性能测试初探,合集粘贴版,转自Testerhome,卡斯著
- [Solved] Splunk: Cannot get username when all users are selected“
- 体积渲染(3)——3D值噪声+光线步进实现体积云
- 3点钟无眠区块链:96小时聊天内容精华全记录
- Python3爬取淘宝网商品数据!
- Mac如何安装MySQL和Navicat
- 微信拼好货商城团购研究转
热门文章
- gradle项目:如何使用idea导入一个自定义jar包
- 若依RuoYi框架log图标与文字怎么改?
- Laya水波shader
- 史上最全的Java进阶书籍推荐,你看了几本?
- JSP[jsp文件]
- SQL之case when then用法
- Samsung/三星Galaxy SIII I9300(玛瑙黑) root教程_方法
- 基于极光IM,ColorUI,renren java开发框架制作的论坛社群群聊小程序
- 中专计算机教研组活动总结,信息技术教研组工作总结【三篇】
- 使用计算机也要遵守规范教学反思,珍爱生命遵守规则教学反思