读书笔记:第3章 System V IPC (1)

        《UNIX网络编程:卷2》P21:图3-2 获取并输出文件系统信息和IPC键

/* P21 fotk.c */
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/ipc.h>
#include <errno.h>
#include <string.h>
int main(int argc, char *argv[])
{
    key_t   key;
    struct stat st; 
    if (argc != 2) {
        fprintf(stderr, "usage: ftok <pathname>\n");
        exit(1);
    }   
    // 获取文件信息
    if (stat(argv[1], &st) < 0) {
        fprintf(stderr, "stat error: %s\n", strerror(errno));
        exit(1);
    }   
    // 把一个已存在的路径名和一个整数标识转换成一个key_t值
    if((key = ftok(argv[1], 0x57)) < 0) {
        fprintf(stderr, "fotk error: %s\n", strerror(errno));
        exit(1);
    }   
    printf("st_dev: %lx, st_ino: %lx, key: %x\n",
            (unsigned long)st.st_dev, (unsigned long)st.st_ino, key);
    exit(0);
}

        运行该程序:

$ ./ftok ftok
st_dev: 80c, st_ino: 3e02ce, key: 570c02ce
$ ./ftok ftok.c
st_dev: 80c, st_ino: 3e02d3, key: 570c02d3
$ ./ftok /
st_dev: 808, st_ino: 2, key: 57080002

        很明显,id的低8位在IPC键的高序8位,st_dev的低8位在IPC键的接下来8位,st_ino的低16位则在IPC键低序16位。

你可能感兴趣的:(读书笔记,《UNIX网络编程》)