`
cuiyadll
  • 浏览: 204852 次
文章分类
社区版块
存档分类
最新评论

linux系统调用之ftok()

阅读更多

ftok原型如下:
                        key_t ftok( char * fname, int id )
                        fname就时你指定的文件(存在,可以访问的)名,id是子序号。
先来简单的叙述一下,如果不太清楚的话,再接着向下看:
                ftok函数是根据pathname和id来创建一个关键字(类型为 key_t),此关键字在创建信号量,创建消息队列的时候都需要使用。其中pathname必须是一个存在的可访问的路径或文件,id必须不得为0。

失败返回值为-1

ftok应用范围

         英文是这样描述的; generate  a  key_t  type  System V IPC key, suitable for use with msgget(2),semget(2), or shmget(2).

系统建立IPC通讯(如消息队列、共享内存时)必须指定一个ID值。通常情况下,该id值通过ftok函数得到。

在一般的UNIX实现中,是将pathname指定文件的索引节点号取出,前面加上子序号得到key_t的返回值。

如指定文件的索引节点号为65538,换算成16进制为0x010002,而你指定的ID值为38,换算成16进制为0x26,则最后的key_t返回值为0x26010002。
    查询文件索引节点号可通过命令: ls -i    来查看

    nux Programmer's Manual                   FTOK(3)
                                                                                                                                      
NAME
       ftok - convert a pathname and a project identifier to a System V IPC
       key
                                                                                                                                      
SYNOPSIS
       # include <sys/types.h>
       # include <sys/ipc.h>
                                                                                                                                      
       key_t ftok(const char *pathname, int proj_id);
                                                                                                                                      
DESCRIPTION
       The ftok function uses the identity of the file named by the given  pathname (which must refer to an existing, accessible file) and the
least significant 8 bits of proj_id (which must be nonzero) to generate a key_t type System V IPC key, suitable for use with msgget(2),
semget(2), or shmget(2).
                                                                                                                                      
       The resulting value is the same for all pathnames that name the same file, when the same value of proj_id is used. The value returned should be different when the (simultaneously existing) files or the project  IDs differ.
                                                                                                                                      
RETURN VALUE
       On success the generated key_t value is returned. On failure -1 is returned, with errno indicating the error as for the stat(2) system
call.

分享到:
评论

相关推荐

    Linux消息队列

    在 Linux 系统中,消息队列是由系统调用 `msgget` 创建的,它需要一个标识符作为参数,以便在系统中唯一标识消息队列。创建消息队列时,可以指定权限和队列的最大长度。 在消息队列编程中,需要定义一个数据结构 `...

    linux ipc的简单使用

    `ftok`函数是Linux系统调用中用于生成一个唯一的IPC键(key_t类型),它是基于文件系统路径和项目ID(project ID)来创建的。这个键用于标识特定的IPC资源,如信号量、消息队列或共享内存。`ftok`的基本语法如下: ...

    消息队列源码-Linux.zip

    在Linux中,消息队列的创建、操作和管理主要通过系统调用实现,如`msgget`用于创建或获取消息队列,`msgsnd`用于发送消息,`msgrcv`用于接收消息,而`msgctl`则用于对消息队列进行控制,比如设置权限、删除队列等。...

    LINUX操作系统消息函数分析

    调用`msgget(key, flags)`时,`key`参数通常由`ftok()`函数生成,它基于文件路径和项目ID来生成一个唯一的键值。`flags`参数则可以包含`IPC_CREAT`(如果队列不存在则创建)和`IPC_EXCL`(如果队列已存在则失败)等...

    Linux系统下使用C语言实现进程借助共享内存实现通信

    在Linux系统中,C语言是实现底层编程和系统级任务的首选语言。在这个场景中,我们关注的是如何利用C语言来实现进程间的通信,特别是通过共享内存的方式。共享内存是一种高效的进程间通信(IPC,Inter-Process ...

    Linux系统编程实验六:进程间通信.doc

    【Linux系统编程实验六:进程间通信】 在操作系统中,进程是执行中的程序的一个实例,它们之间可能存在交互和数据共享的需求。Linux系统提供多种进程间通信(IPC, Inter-Process Communication)机制,如无名管道、...

    操作系统linux实验五

    本实验主要针对大学课程中的操作系统部分,重点在于深入理解并实践Linux环境下的信号量机制。通过本次实验,学生能够熟悉信号量的基本概念及其在多线程编程中的作用,并学会如何在实际编程中正确使用信号量来解决...

    操作系统课程实践之Linux进程通信.doc

    Linux 进程通信是操作系统课程的重要组成部分,本文将通过实验实践,详细介绍 Linux 进程通信机制和实践,包括进程创建、进程间通信的机制、消息队列和共享内存的使用。 一、实验目的 本实验的目的是初步了解 ...

    linux两不同进程用消息队列通信

    在Linux操作系统中,进程间的通信(IPC,Inter-Process Communication)是系统编程的重要部分,它允许不同的进程共享数据和协调工作。在这个场景中,我们关注的是消息队列,这是一种允许两个或多个进程之间异步传递...

    西安邮电大学Linux高级编程进程间通信.ppt

    在 Linux 系统中,高级编程中的一种重要技术是进程间通信(IPC),它允许不同的进程之间进行数据交换和通信。在 Linux 系统中,提供了多种进程间通信机制,包括 System V IPC、Socket 和管道等。其中,System V IPC ...

    xxjyjy5.rar_LINUX消息队列_linux 消息队列_linux 消息_linux 消息队列_消息队列

    本教程将深入探讨Linux环境下的消息队列,包括其概念、实现原理、使用方法以及相关的系统调用。 一、消息队列的概念 消息队列是一种存储消息的特殊数据结构,它允许多个进程同时读取和写入。与管道和信号量不同,...

    Shell脚本实现ftok函数

    Unix/Linux系统提供了多种IPC机制,包括但不限于共享内存、信号量和消息队列。为了区分不同的IPC对象,每个对象都需要一个独一无二的键(Key)。在实践中,通常采用ftok函数生成这样的键。 #### ftok函数原理 ftok...

    a_sysv_msgqueue.tgz

    Linux系统中的进程间通信(IPC,Inter-Process Communication)是多进程协同工作的重要机制,它允许不同的进程之间共享数据和消息。...同时,这个例子也展示了如何结合C语言和Linux系统调用来实现底层的系统功能。

    Linux消息管道机制

    Linux操作系统提供了多种进程间通信(IPC)的方法,其中消息队列是一种高效且灵活的机制。消息队列允许不同进程通过发送和接收消息来进行通信,这些消息可以包含不同类型的数据。本文旨在详细介绍Linux下消息队列的...

    Linux程序设计实验2.docx

    1. **熟悉Linux系统调用接口:** 学习如何在C语言中利用Linux提供的系统调用来进行程序开发。 2. **进程创建与管理:** 掌握在Linux环境下创建进程的方法,理解进程与程序之间的区别。 3. **并发执行的理解:** 深入...

    Linux进程间通信

    在Linux中,系统调用`shmget`用于创建或连接到一个共享内存段,而`shmat`则用于将共享内存映射到进程的地址空间。 `shmget`函数的主要参数包括键值、内存大小和权限标志。键值通常用于标识共享内存段,可以是整数值...

    linux使用消息队列实现进程间双向通信

    在Linux操作系统中,进程间通信(IPC,Inter-Process Communication)是多个进程共享数据或交换信息的一种机制。本文将深入探讨如何利用消息队列这一IPC机制实现进程间的双向通信。消息队列允许进程异步地发送和接收...

    linux环境编程-IPC 之 msg queue.docx

    系统调用`msgget()`用于创建或访问消息队列。调用的原型是`int msgget(key_t key, int msgflg);`其中,`key`参数是一个关键字,通常由`ftok()`函数生成,用于唯一标识消息队列。`msgflg`参数定义了行为,如`IPC_...

    msg_creat.rar_LINUX消息队列_linux 消息队列_linux 消息队列_消息队列

    在Linux操作系统中,消息队列是一种非常重要的进程间通信(IPC, Inter-Process Communication)机制。消息队列允许进程之间通过消息传递数据,提供了一种可靠且高效的数据交换方式。标题"msg_creat.rar_LINUX消息...

Global site tag (gtag.js) - Google Analytics