我正在学习Unix IPC,而我的书只谈论msg *系列函数。不过,在浏览手册页时,我了解到了mq_等价物。 http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi/0650/bks/SGI_Developer/books/T_IRIX_Prog/sgi_html/ch06.html描述了两者之间的一些差异,但我不确定这是多少实现特定的。是否有任何令人信服的理由使用一个家庭而不是另一个家庭?要么比其他人“更好”?我应该使用msgsnd还是mq_send?
2
A
回答
4
mq_*
函数是POSIX函数。 msg*
功能来自通常称为“System V IPC”的功能(因为它们是UNIX System V引入的包括共享内存和信号量的IPC设备的一部分)。我认为可以这样说,msg*
函数包含在POSIX和X/Open标准中,这是因为向后兼容性比其他方法更合适;这可能会使他们变得不公正,但通常标准试图避免多种方式来达到相同的结果。他们在原始版本的POSIX中都没有。
你需要考虑你将移植你的代码的位置。我会建议使用更现代的mq_*
函数,如果它们在任何需要的地方都可用的话 - 尽管我自己并没有使用它们。一般来说,msg*
函数比共享内存和信号量函数使用得少,但该接口比POSIX接口长(约十年或更长),所以它可能更广泛地可用。
1
一般来说,您应该尽量使用POSIX版本,因为它们应该更适合更广泛的平台。
主要区别在于POSIX队列可以在消息放入空队列时生成信号或产生新线程。 POSIX队列也总是返回最高优先级的最早的消息; SysV队列可以返回您指定的任何优先级的消息。
每个人的里程数都会有所不同,但我发现POSIX界面比SYSV或SysV IPC更为直观和不那么古怪。
相关问题
- 1. 我应该使用public $ var还是应该使用__construct()?
- 2. 我应该使用表格还是div?
- 3. 我应该使用NSOperation还是NSRunLoop?
- 4. 我应该使用SASS还是SCSS?
- 5. 我应该使用SVN还是Git?
- 6. 我应该使用em还是px?
- 7. 我应该使用MapView还是MapFragment
- 8. 我应该使用Angular.copy()还是_.clone()?
- 9. 我应该使用BIT(1)还是BOOL?
- 10. 我应该使用GulpJS还是Ember-cli?
- 11. RegEx - 我应该使用Capture还是Group?
- 12. 我应该使用Boost.GIL还是死了?
- 13. 我应该使用int还是UInt16?
- 14. 我应该使用node-uuid还是uuid?
- 15. 我应该使用data.frame还是矩阵?
- 16. 我应该使用Get还是Load - nhibernate?
- 17. Numpy:我应该使用newaxis还是None?
- 18. 我应该使用JSON还是XML?
- 19. 我应该使用double还是float?
- 20. 我应该使用ImageButton还是Button?
- 21. 我应该使用Timer,Handler还是ASyncTask?
- 22. 我应该使用PowerShell还是CMD.exe?
- 23. JDO - 我应该使用detachCopy还是makeTransient?
- 24. 我应该使用PurePDF还是AlivePdf
- 25. 我应该使用plist,SQLite还是NsMutableArray?
- 26. 我应该使用AJAX还是WebSockets。
- 27. 我应该使用MySQL还是MongoDB?
- 28. Python:我应该使用eval,exec还是..?
- 29. 我应该使用WCF还是ASMX webservice?
- 30. 我应该使用fputs还是putchar?
哇,所以msg *函数不是POSIX?我的书叫他们“POSIX:XSI”消息队列... – Steven 2009-12-05 02:51:50
我认为这就是所谓的重新品牌。 ;) – Duck 2009-12-05 03:06:23
它们在POSIX中 - 它们不是由POSIX产生的(事实上它们是在POSIX之前的)。你的书是正确的,可以给他们贴上POSIX:XSI的标签。 – 2009-12-05 03:35:35