71 个版本
新 0.9.2 | 2024年8月19日 |
---|---|
0.8.23 | 2024年7月23日 |
0.8.20 | 2024年3月18日 |
0.8.18 | 2023年9月22日 |
0.1.0 | 2019年7月26日 |
#89 in 操作系统
2,973 每月下载量
用于 6 个crate(3个直接使用)
5.5MB
74K SLoC
nc
无需 std
或 libc
直接访问系统调用。
功能
- 无需glibc或musl
- 通过汇编直接访问syscalls
- 没有全局errno变量,每个函数返回errno
- 支持最新的内核API,如linux 5.0+中引入的io-uring和pidfd
使用方法
将此添加到 Cargo.toml
[dependencies]
nc = "0.9"
示例
获取文件状态
let mut statbuf = nc::stat_t::default();
match unsafe { nc::stat("/etc/passwd", &mut statbuf) } {
Ok(_) => println!("s: {:?}", statbuf),
Err(errno) => eprintln!("Failed to get file status, got errno: {}", errno),
}
获取可读的错误字符串
let errno = nc::EPERM;
println!("err: {:?}", nc::strerror(errno);
创建进程
let pid = unsafe { nc::fork() };
match pid {
Ok(0) => {
println!("child process");
let args = ["ls", "-l", "-a"];
let env = ["FOO=BAR"];
match unsafe { nc::execve("/bin/ls", &args, &env) } {
Ok(_) => {},
Err(errno) => eprintln!("`ls` got err: {}", errno),
}
}
Ok(pid) => println!("[parent] child pid: {pid} "),
Err(errno) => eprintln!("errno: {}", errno),
}
杀死自身
let pid = unsafe { nc::getpid() };
let ret = unsafe { nc::kill(pid, nc::SIGTERM) };
// Never reach here.
println!("ret: {:?}", ret);
或处理信号
fn handle_alarm(signum: i32) {
assert_eq!(signum, nc::SIGALRM);
}
fn main() {
#[cfg(nc_has_sa_restorer)]
let sa = nc::sigaction_t {
sa_handler: handle_alarm as nc::sighandler_t,
sa_flags: nc::SA_RESTORER | nc::SA_RESTART,
sa_restorer: nc::restore::get_sa_restorer(),
..nc::sigaction_t::default()
};
#[cfg(not(nc_has_sa_restorer))]
let sa = nc::sigaction_t {
sa_handler: handle_alarm as nc::sighandler_t,
sa_flags: nc::SA_RESTART,
..nc::sigaction_t::default()
};
let ret = unsafe { nc::rt_sigaction(nc::SIGALRM, Some(&sa), None) };
assert!(ret.is_ok());
let remaining = unsafe { nc::alarm(1) };
let mask = nc::sigset_t::default();
let ret = unsafe { nc::rt_sigsuspend(&mask) };
assert!(ret.is_err());
assert_eq!(ret, Err(nc::EINTR));
assert_eq!(remaining, Ok(0));
}
支持的操作系统和架构
- linux
- aarch64
- arm
- loongarch64
- mips
- mips64
- mips64el
- mipsel
- powerpc64
- powerpc64el
- riscv64
- s390x
- x86
- x86-64
- android
- aarch64
- freebsd
- x86-64
- netbsd
- x86-64
- mac os
- x86-64
相关项目
许可
此库受Apache-2.0 许可证管辖。