我是靠谱客的博主 害羞毛衣,最近开发中收集的这篇文章主要介绍linux下ipc是什么目录,Linux IPC入门基础知识,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

简介

IPC 主要有消息队列、信号量和共享内存3种机制。和文件一样,IPC 在使用前必须先创建,使用 ipcs 命令可以查看当前系统正在使用的 IPC 工具:

7224cef3673ab09d119364de4307e6b8.png

由以上可以看出,一个 IPC 至少包含 key值、ID值、拥有者、权限和使用的大小等关键信息。如果需要手工删除某个 IPC 机制,可以使用 ipcrm 命令。

key 值和 ID 值

IPC 在实现时编写使用 key 值作为参数创建,如果在创建时使用相同的 key 值将得到同一个 IPC 对象的 ID,这样就保证了双方可以获取用于传递数据的 IPC 机制 ID 值。key 值为一个32位的整型数据。Linux 提供函数 ftok() 来创建 key 值。

#include

#include

/* pathname 为文件路径名,第2个参数为 int 型变量 */

key_t ftok(const char *pathname, int proj_id);

每个文件都有其自身的属性,可以通过 stat() 函数读取,在 ftok() 函数创建 key 值过程中使用了该文件属性的 st_dev 和 st_ino 。具体构成如下:

92aef638f4c05a7595fba2fc28251bd2.png

如果使用 ftok() 函数的参数是相同的,那么得到的 key 值是唯一的。所以说两个进程使用相同的参数创建同类 IPC 的话,就可以实现进程间的通信。

用以下程序来演示 key 值各位的组成:

#include

#include

#include

#include

#include

#include

int main(int argc, char **argv){

int arg, key;

struct stat buf;

arg = atoi(argv[2]);

key = ftok(argv[1], arg);

printf("Key : %x nn", key);

stat(argv[1], &buf);

printf("argv[2] low 8 bits : %x n", arg & 0x0ff);

printf("st_dev low 8 bits : %x n", buf.st_dev & 0x0ff);

printf("st_ino low 16 bits : %x n", buf.st_ino & 0x0ffff);

return 0;

}

运行结果如下:

6eff7354d4c9773e2a010e36c06b8130.png

拥有者及权限

要访问任何一个 IPC 工具需要对该 IPC 工具拥有相应的权限,一个 IPC 工具所具有的 IPC 访问权限定义为 struct ipc_perm。其成员定义如下:

d81ea093fda24f3f636b078a371d0fca.png

补充 stat 结构体:

struct stat {

mode_t st_mode; // 文件对应的模式,文件,目录等

ino_t st_ino; // inode 节点号

dev_t st_dev; // 设备号码

dev_t st_rdev; // 特殊设备号码

nlink_t st_nlink; // 文件的连接数

uid_t st_uid; // 文件所有者

gid_t st_gid; // 文件所有者对应的组

off_t st_size; // 普通文件,对应的文件字节数

time_t st_atime; // 文件最后被访问的时间

time_t st_mtime; // 文件内容最后被修改的时间

time_t st_ctime; // 文件状态改变时间

blksize_t st_blksize; // 文件内容对应的块大小

blkcnt_t st_blocks; // 文件内容对应的块数量

};

0b1331709591d260c1c78e86d0c51c18.png

最后

以上就是害羞毛衣为你收集整理的linux下ipc是什么目录,Linux IPC入门基础知识的全部内容,希望文章能够帮你解决linux下ipc是什么目录,Linux IPC入门基础知识所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部