【问题标题】:Difference between a shared memory based pipe , in Posix vs System V?Posix vs System V中基于共享内存的管道之间的区别?
【发布时间】:2012-07-25 13:18:59
【问题描述】:

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

我选择了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 版本实现上述库需要哪些调用?

谢谢

【问题讨论】:

    标签: c operating-system posix shared-memory


    【解决方案1】:

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

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

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

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

    获取信号量使用semget,锁定和解锁使用semop,销毁信号使用semctl

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      • 2015-09-30
      相关资源
      最近更新 更多