shmat函数成功执行会将shm_id段的shmid_ds结构的shm_nattch计数器的值加1。当对共享内存段操作结束时,应调用shmdt函数,作用是将指定的共享内存段从当前进程空间中脱离出去。函数原型如下:参数addr是调用shmat函数的返回值,函数执行成功返回0,并将该共享内存的shmid_ds结构的shm_nattch计数器减1,失败返回–1。下面实例演示了操作共享内存段的流程。程序的开始部分先检测用户是否有输入,如出错则打印该命令的使用帮助。接下来从命令行读取将要引入的共享内存ID,使用shmat函数引入该共享内存,并在分离该内存之前睡眠3秒以方便查看系统IPC状态。(1)在vi编辑器中编辑该程序如下:程序清单14-9 opr_shm.c 操作共享内存段(2)在shell中编译该程序如下:$gcc opr_shm.c -o opr_shm(3)在shell中运行该程序如下:$./ opr_shm 2752516segment attached at 0xb7f29000------ Shared Memory Segments --------key shmid owner perms bytes nattch status0x00 0root 600 393216 2 dest0x00000root 666 4096 00x0056a4d5 2686978 root 600 488 10x0056a4d6 2719747 root 600 131072 10x00000root 666 4096 1segment detached------ Shared Memory Segments --------key shmid owner perms bytes nattch status0x000 00 65root 600 393216 2 dest0x000209 root 666 4096 00x0056a4d5 2 686978 root 600 488 10x0056a4d6 27 19747 root 600 131072 10x000002516 root 666 4096 0上述程序中从命令行中读取所要引入的共享内存ID,并使用shmat函数引入该内存到当前的进程空间中。