当前位置:网站首页 > 技术博客 > 正文

linux fopen函数的用法



前言

最新项目代码有关信号量、共享内存,直接使用数值,不能得到预想的效果,调试发现不能直接使用数值,而是ftok函数获取键值,此前不了解,故记录之。

原理

共享内存、消息队列、信号量都是通过一个中间介质来进行通信的,这种介质多的是。就是怎么区分出来,就像唯一一个身份证来区分人一样。你随便来一个就行,就是因为这。只要唯一就行,就想起来了文件的设备编号和节点,它是唯一的,但是直接用它来作识别好像不太好,不过可以用它来产生一个号。ftok()就出场了。

函数形式

函数常见问题

答:proj_id是可以根据自己的约定,随意设置。这个数字,有的称之为project ID; 在UNIX系统上,它的取值是1到255。

函数使用陷阱

ubuntu中ftok产生键值的原理

通过执行结果可看出,ftok获取的键值是由ftok()函数的第二个参数的后8个bit,st_dev的后两位,st_ino的后四位构成的

通过ftok返回的是根据文件(pathname)信息和计划编号(proj_id)合成的IPC key键值,从而避免用户使用key值的冲突。proj_id值的意义让一个文件也能生成多个IPC key键值。ftok利用同一文件最多可得到IPC key键值0xff(即256)个,因为ftok只取proj_id值二进制的后8位,即16进制的后两位与文件信息合成IPC key键值。

有关 st_dev和 st_ino的定义如下:

update 项目问题

最早是直接设置数值作为键值,与当前项目的键值获取方式不一致,导致共享内存的数据有误。

更改为

即可;

参考

1. ftok()函数深度解析_satellite13的博客-CSDN博客;

2. linux进程间通信--消息队列相关函数(ftok)详解_andylauren的博客-CSDN博客;

  • 上一篇: 协程 go
  • 下一篇: logistic 激活函数
  • 版权声明


    相关文章:

  • 协程 go2025-06-05 17:01:05
  • 反编译exe文件2025-06-05 17:01:05
  • map与multimap2025-06-05 17:01:05
  • prm算法2025-06-05 17:01:05
  • 高并发是多线程还是多进程2025-06-05 17:01:05
  • logistic 激活函数2025-06-05 17:01:05
  • 类的私有成员函数怎么调用2025-06-05 17:01:05
  • 免费爬虫软件哪个好2025-06-05 17:01:05
  • python链接mongo2025-06-05 17:01:05
  • 存储器的分类是怎样的?各有哪些特点?2025-06-05 17:01:05