0

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

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

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

For semaphores and synchronization 

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

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

我的 TA 告诉我,他更喜欢我用System Vversion 来实现那个库,但是因为我正在考试中,所以我没有额外的时间来做这件事(我猜至少需要一周时间)。

我的问题是:

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

谢谢

4

1 回答 1

1

关于问题(1) -Posix管道的System V实现和管道的实现之间应该没有区别 - 如果您正在使用一组例程实现库,那么用户不应该看到两者之间的任何区别实施。

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

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

请注意,关键是区分不同共享内存/信号量项的神奇唯一项。

用于获取您使用的信号量semget、锁定和解锁您使用的信号量semop以及销毁您使用的信号量semctl

System V 信号量和共享内存段可以在程序执行后继续存在 - 即,如果程序在没有销毁它们的情况下终止,那么它们将保留在系统中,直到它们被销毁或以编程方式重新创建,或者使用ipcrm

于 2012-07-25T13:31:12.893 回答