在ipc通信中 system V 模式的ipc通信中都需要一个key值来生成对应的ID,那么key是如何生成的呢?

通过函数ftok生成

       #include <sys/types.h>#include <sys/ipc.h>key_t ftok(const char *pathname, int proj_id);
  • 参数:
    pathname: 传入一个路径(一般是当前路径“ . ”)
    proj_id : 随便填写一个数(要做通信的话通信的另外一端要与这个数保持一致才能找到对应的icpID)

  • 返回值: 生成一个独有的数

  • 具体如何生成?
    key 31-24 proj_id 低8位
    key 23-16 pathname的st_dev属性的低8位
    key 15-0 pathname的st_ino属性的低16位

    32位组合而成一个int值,就是我们的ftok的返回值了

demo

#include<sys/ipc.h>
#include<stdio.h>
#include<sys/stat.h>
#include<stdlib.h>int main(int argc,char *argv[])
{key_t key;int i;struct stat buf;if(argc!=3){printf("use: command path number\n");return 1;}i=atoi(argv[2]);if((stat(argv[1],&buf))==-1){perror("stat");exit(EXIT_FAILURE);}printf("file st_dev=0x%x\n",buf.st_dev);printf("file st_ino=0x%x\n",buf.st_ino);printf("number=0x%x\n",i);key=ftok(argv[1],i);printf("key=0x%x \tkey>>24=%x \tkey&0xffff=%x \t(key>>16)&0xff=%x\n",key,key>>24,key&0xffff,(key>>16)&0xff);
}

执行效果

Linux中ftok函数详解相关推荐

  1. Linux中fork()函数详解

    Linux中fork()函数详解 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事, ...

  2. linux 中 sigaction 函数详解

    linux 中 sigaction 函数详解 一.函数原型 sigaction 函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作) int sigaction(int signum, ...

  3. Linux中execl函数详解与日常应用(附图解与代码实现)

    目录 execl函数 exec函数族的日常应用 1.Linux中第一个终端的创建 2.终端下.c文件的执行 exec其实并不是一个函数,而是由六个以exec开头的函数所构成的一个函数族,如下图所示 e ...

  4. linux中 fopen函数,详解C语言中的fopen()函数和fdopen()函数

    C语言fopen()函数:打开一个文件并返回文件指针头文件: #include fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为: FILE * fopen(const char * ...

  5. linux中fork函数详解,fork() 函数详解

    fork() 函数是 linux/unix 下一种特别的创建子进程的函数,它不同与 Windows,这个函数在执行成功后会有两个返回值,一个返回值==0代表创建了子进程,一个返回值大于0代表还是当前程 ...

  6. Linux中fork函数详解

     一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程, 也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不 ...

  7. linux中sigaction函数详解

    一.函数原型:sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作) int sigaction(int signum, const struct sigaction * ...

  8. linux中open函数详解

    1.open函数 包含头文件 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> ope ...

  9. linux中write函数详解

    1.write函数 头文件#include <unistd.h> 三个参数 函数说明:write()会把参数buf所指的内存写入count个字节到参数fd所指的文件内. 返回值:如果顺利w ...

最新文章

  1. 双重惊喜——Windows Phone Developer Tools初体验
  2. python classmethod知识_python基础知识讲解——@classmethod和@staticmethod的作用
  3. 索引维护存储过程(作业调用)
  4. JUC——线程同步锁(ReentrantLock)
  5. 高效实用的.NET开源项目
  6. POJ3614,P2887-Sunscreen(防晒霜)【贪心】
  7. python/c++计算psnr
  8. VB.NET 反射机制取得当前函数名 类名
  9. 求求你给你的微信头像戴个圣诞帽吧!
  10. android学习--TabHost选项卡组件
  11. 软件测试启航篇:测试的分类
  12. React学习文档阅读(一)
  13. Codeforces 450A. Jzzhu and Children
  14. FlinkWindow和水印
  15. 数商云渠道分销管理系统方案:分销渠道系统趋势、作用、功能、业务场景
  16. 2021.07.22禾赛提前批一面面经
  17. Verilog TestBench 高级教程
  18. Nexus因异常重启导致OrientDB数据库变为只读的问题修复
  19. 早期股权分配不是有钱就能搞定的!
  20. js省市县三级联动效果实例

热门文章

  1. 阿里云天池龙珠计划 机器学习篇---stack09
  2. 验证码组件,上传下载组件
  3. 【强烈推荐】Java主函数入口,此篇文章极短极细,慎入
  4. 蓝牙音乐 A2DP 剖析
  5. 详解Spring Boot框架中的@Conditional系列注解
  6. wincc的画面怎么用博图打开_博图WINCC如何做画面模板
  7. 新丝绸之路,高铁 ---中国的未来
  8. 基于Django简单实现一个员工管理系统
  9. 如何识别哭泣csdn_孩子哭泣的时候,别再说“不准哭”,聪明妈妈都在用这三个方法...
  10. 谈广告很难?友链交换不好找?有神器