Chinaunix首页 | 论坛 | 博客
  • 博客访问: 155962
  • 博文数量: 15
  • 博客积分: 1614
  • 博客等级: 上尉
  • 技术积分: 165
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-18 00:10
文章分类
文章存档

2012年(2)

2011年(7)

2010年(6)

分类: LINUX

2011-04-09 00:31:25

pipe() 是不是应该输入一个 fd[2],并且返回一个int?

不一定的。在 Linux/mips 中,系统调用 sys_pipe 用返回值来提供给你 fd[0],用3号寄存器提供 fd[1]。用 strace 可以观察到这点,其行为与 x86 上的不一致。

究其原因,是因为 mips 约定用 v0 和 v1 这2个寄存器来返回值。v0即为函数 return 的值,而 v1 是3号寄存器。用这种方法,避免了内存访问,效率高且符合 MIPS 世界的调用约定。可见 Linux 在各架构上并非一成不变的,要充分地本地化以期实现该平台的最大效率。

uClibc 0.9.29 在遇到 Linux/MIPS 的 pipe 执行失败(返回-1)情况时,处理不当,造出崩溃。0.9.30 版后解决了此问题
阅读(3751) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~