Posix与System V中基于共享内存的管道之间的区别?

时间:2012-07-25 13:18:59

标签: c operating-system posix shared-memory

作为我的家庭作业项目的一部分,我必须实现一个使用共享内存实现管道的库。匿名和命名管道。

我选择Posix实现,意思是,我使用了以下调用:

mmap()
shm_open()
ftruncate()
shm_unlink()

For semaphores and synchronization 

sem_init()
sem_getvalue()
sem_wait()
sem_post()

(我可能会忘记一两个电话)

我的TA告诉我,他更喜欢用System V版本实现该库, 但是因为我正在考试中,所以我没有多余的时间去做(至少需要一个星期,我猜)。

我的问题是:

  1. 在Posix中实现的管道与在System-V中实现的管道之间有什么区别?
  2. 使用Sys V版本实现上述库需要哪些调用?
  3. 谢谢

1 个答案:

答案 0 :(得分:1)

关于问题(1) - 管道的Posix实现和管道的System V实现之间应该没有区别 - 如果你正在实现一个带有一组管道的库例程,然后用户不应该看到两个实现之间的任何差异。

对于开发人员,用于System V的共享内存调用是:shmget创建shmat来访问,shmctl来销毁shmdt用于从当前进程取消映射共享内存段。)

您使用ftok调用将文件名转换为您将使用的密钥。

请注意,该键是神奇的 uniquification 项,用于区分不同的共享内存/信号量项。

要获取使用semget的信号量,要使用semop来锁定和解锁,并使用semctl将其销毁。

系统V信号量和共享内存段可以在程序执行之后继续存在 - 即如果程序终止而不破坏它们,那么它们将保留在系统中,直到它们被编程或使用{{3}销毁或重新创建。 }