13个版本
使用旧的Rust 2015
0.0.14 | 2017年5月24日 |
---|---|
0.0.13 | 2017年5月24日 |
0.0.12 | 2017年4月25日 |
0.0.11 | 2016年10月1日 |
0.0.10 | 2016年9月19日 |
#508 in Unix APIs
175 每月下载次数
在 21 个crate中使用 (7 直接)
1MB
13K SLoC
[](This file is part of syscall-alt. It is subject to the license terms in the COPYRIGHT file found in the top-level directory of this distribution and at https://raw.githubusercontent.com/lemonrock/syscall-alt/master/COPYRIGHT. No part of syscall-alt, including this file, may be copied, modified, propagated, or distributed except according to the terms contained in the COPYRIGHT file.) [](Copyright © 2016 The developers of syscall-alt. See the COPYRIGHT file in the top-level directory of this distribution and at https://raw.githubusercontent.com/lemonrock/syscall-alt/master/COPYRIGHT.)
syscall-alt
syscall-alt 是一个Rust crate,提供了针对某些Linux平台的系统调用内联汇编(asm!
宏)定义。它还包括:
- 一个定义常用Linux系统调用的枚举;
- 一些简单的封装逻辑,以便于与系统调用一起使用。
- 正确的系统调用/Posix错误代码('E'),例如
EINVAL
- Linux:
- 在MIPS和PowerPC上略有不同
- MIPS64与MIPS相同
- PowerPC64与PowerPC相同
- PowerPC几乎与x86_64相同,除了
EDEADLOCK
:-- PowerPC是唯一一个
EDEADLOCK != EDEADLK
(所以使用match
时要小心)
- PowerPC是唯一一个
- MIPS与x86_64 非常 不同
- 但它有完全相同的一组E数字
- Linux:
- SYS调用数字和E数字对每个架构都可用,例如,如果您想了解针对
arm
的它们,但编译为x86_64
,它们都是可用的- 注意使用
EDEADLOCK
,EDEADLCK
,ENOTSUP
和EOPNOTSUPP
;它们的定义和值各不相同,有时缺失,有时相等 - 在使用
EWOULDBLOCK
和EAGAIN
时要小心;所有当前平台都将EWOULDBLOCK
视为与EAGAIN
相同,但这并不是 POSIX 的要求。
- 注意使用
- 这是一个 Windows 模拟,包含 EAGAIN 等在 Windows 中定义的项(但没有 syscall 编号)。
代码非常原始,所以请预期会有破坏性变更。
这个 crate 是 #[!no_std]
,并且不需要 std
库或 libc
crate。
待办事项
- 对于 Linux mips、mips64、powerpc、powerpc64 或 s390x,尚未实现 syscall,但可以通过尝试使用 musl 的
syscall_arch.h
头文件(除了 s390x)来实现。 - 我们可以实现 iOS ARM 32 位 syscall;有关想法,请参阅 https://stackoverflow.com/questions/4371897/arm-darwin-assembly-looking-for-system-calls-tutorial-perhaps。
- 当 Rust 支持 BSD 的 ARM 和 ARM64 时,实现支持。
- 对于 Solaris,未实现 syscall,并且永远不会在 Windows 上实现。
许可
此项目的许可协议为 AGPL。