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 版后解决了此问题
阅读(3798) | 评论(0) | 转发(0) |