作为我的家庭作业项目的一部分,我必须实现一个使用共享内存实现管道的库。匿名和命名管道。
我选择Posix
实现,意思是,我使用了以下调用:
mmap()
shm_open()
ftruncate()
shm_unlink()
For semaphores and synchronization
sem_init()
sem_getvalue()
sem_wait()
sem_post()
(我可能会忘记一两个电话)
我的TA告诉我,他更喜欢用System V
版本实现该库,
但是因为我正在考试中,所以我没有多余的时间去做(至少需要一个星期,我猜)。
我的问题是:
Sys V
版本实现上述库需要哪些调用? 谢谢
答案 0 :(得分:1)
关于问题(1) - 管道的Posix
实现和管道的System V
实现之间应该没有区别 - 如果你正在实现一个带有一组管道的库例程,然后用户不应该看到两个实现之间的任何差异。
对于开发人员,用于System V
的共享内存调用是:shmget
创建shmat
来访问,shmctl
来销毁shmdt
用于从当前进程取消映射共享内存段。)
您使用ftok
调用将文件名转换为您将使用的密钥。
请注意,该键是神奇的 uniquification 项,用于区分不同的共享内存/信号量项。
要获取使用semget
的信号量,要使用semop
来锁定和解锁,并使用semctl
将其销毁。
系统V信号量和共享内存段可以在程序执行之后继续存在 - 即如果程序终止而不破坏它们,那么它们将保留在系统中,直到它们被编程或使用{{3}销毁或重新创建。 }