Crate linux_syscall

Source
Expand description

This library defines syscall numbers and a syscall! macro for directly invoking Linux system calls.

The arch modules document available syscall numbers for all supported architectures, and the top-level module re-exports syscall numbers for the current target platform.

Syscall results may be inspected with the Result* traits.

§Example

let stdout: i32 = 1;
let hello = "Hello, world!\n\0";
let rc = unsafe {
	syscall!(SYS_write, stdout, hello.as_ptr(), hello.len())
};
rc.check()?;

§Safety

Very unsafe.

Linux syscalls are low-level primitives that operate without any notion of borrow checking or type safety. It is the caller’s responsibility to ensure parameters have types, values, and lifetimes appropriate to the syscall being invoked.

  • The kernel cannot distinguish *const T and *mut T.
  • Many syscalls accept complex parameters as pointers to a struct. The caller must ensure such parameters have appropriate layout and alignment.
  • Syscalls vary between architectures. The same syscall name may have a completely different signature even on similar targets, for example SYS_mmap on x86 and x86_64.

Modules§

arch
Linux syscall numbers for specific target architectures.

Macros§

syscall
Invokes a Linux syscall.

Structs§

Syscall
An architecture-specific syscall number.

Constants§

SYS_accept
SYS_accept4
SYS_access
SYS_acct
SYS_add_key
SYS_adjtimex
SYS_alarm
SYS_arch_prctl
SYS_bind
SYS_bpf
SYS_brk
SYS_capget
SYS_capset
SYS_chdir
SYS_chmod
SYS_chown
SYS_chroot
SYS_clock_adjtime
SYS_clock_getres
SYS_clock_gettime
SYS_clock_nanosleep
SYS_clock_settime
SYS_clone
SYS_clone3
SYS_close
SYS_close_range
SYS_connect
SYS_copy_file_range
SYS_creat
SYS_delete_module
SYS_dup
SYS_dup2
SYS_dup3
SYS_epoll_create
SYS_epoll_create1
SYS_epoll_ctl
SYS_epoll_pwait
SYS_epoll_pwait2
SYS_epoll_wait
SYS_eventfd
SYS_eventfd2
SYS_execve
SYS_execveat
SYS_exit
SYS_exit_group
SYS_faccessat
SYS_faccessat2
SYS_fadvise64
SYS_fallocate
SYS_fanotify_init
SYS_fanotify_mark
SYS_fchdir
SYS_fchmod
SYS_fchmodat
SYS_fchown
SYS_fchownat
SYS_fcntl
SYS_fdatasync
SYS_fgetxattr
SYS_finit_module
SYS_flistxattr
SYS_flock
SYS_fork
SYS_fremovexattr
SYS_fsconfig
SYS_fsetxattr
SYS_fsmount
SYS_fsopen
SYS_fspick
SYS_fstat
SYS_fstatfs
SYS_fsync
SYS_ftruncate
SYS_futex
SYS_futex_waitv
SYS_futimesat
SYS_get_mempolicy
SYS_get_robust_list
SYS_get_thread_area
SYS_getcpu
SYS_getcwd
SYS_getdents
SYS_getdents64
SYS_getegid
SYS_geteuid
SYS_getgid
SYS_getgroups
SYS_getitimer
SYS_getpeername
SYS_getpgid
SYS_getpgrp
SYS_getpid
SYS_getppid
SYS_getpriority
SYS_getrandom
SYS_getresgid
SYS_getresuid
SYS_getrlimit
SYS_getrusage
SYS_getsid
SYS_getsockname
SYS_getsockopt
SYS_gettid
SYS_gettimeofday
SYS_getuid
SYS_getxattr
SYS_init_module
SYS_inotify_add_watch
SYS_inotify_init
SYS_inotify_init1
SYS_inotify_rm_watch
SYS_io_cancel
SYS_io_destroy
SYS_io_getevents
SYS_io_pgetevents
SYS_io_setup
SYS_io_submit
SYS_io_uring_enter
SYS_io_uring_register
SYS_io_uring_setup
SYS_ioctl
SYS_ioperm
SYS_iopl
SYS_ioprio_get
SYS_ioprio_set
SYS_kcmp
SYS_kexec_file_load
SYS_kexec_load
SYS_keyctl
SYS_kill
SYS_landlock_add_rule
SYS_landlock_create_ruleset
SYS_landlock_restrict_self
SYS_lchown
SYS_lgetxattr
SYS_link
SYS_linkat
SYS_listen
SYS_listxattr
SYS_llistxattr
SYS_lookup_dcookie
SYS_lremovexattr
SYS_lseek
SYS_lsetxattr
SYS_lstat
SYS_madvise
SYS_mbind
SYS_membarrier
SYS_memfd_create
SYS_memfd_secret
SYS_migrate_pages
SYS_mincore
SYS_mkdir
SYS_mkdirat
SYS_mknod
SYS_mknodat
SYS_mlock
SYS_mlock2
SYS_mlockall
SYS_mmap
SYS_modify_ldt
SYS_mount
SYS_mount_setattr
SYS_move_mount
SYS_move_pages
SYS_mprotect
SYS_mq_getsetattr
SYS_mq_notify
SYS_mq_open
SYS_mq_timedreceive
SYS_mq_timedsend
SYS_mq_unlink
SYS_mremap
SYS_msgctl
SYS_msgget
SYS_msgrcv
SYS_msgsnd
SYS_msync
SYS_munlock
SYS_munlockall
SYS_munmap
SYS_name_to_handle_at
SYS_nanosleep
SYS_newfstatat
SYS_open
SYS_open_by_handle_at
SYS_open_tree
SYS_openat
SYS_openat2
SYS_pause
SYS_perf_event_open
SYS_personality
SYS_pidfd_getfd
SYS_pidfd_open
SYS_pidfd_send_signal
SYS_pipe
SYS_pipe2
SYS_pivot_root
SYS_pkey_alloc
SYS_pkey_free
SYS_pkey_mprotect
SYS_poll
SYS_ppoll
SYS_prctl
SYS_pread64
SYS_preadv
SYS_preadv2
SYS_prlimit64
SYS_process_madvise
SYS_process_mrelease
SYS_process_vm_readv
SYS_process_vm_writev
SYS_pselect6
SYS_ptrace
SYS_pwrite64
SYS_pwritev
SYS_pwritev2
SYS_quotactl
SYS_quotactl_fd
SYS_read
SYS_readahead
SYS_readlink
SYS_readlinkat
SYS_readv
SYS_reboot
SYS_recvfrom
SYS_recvmmsg
SYS_recvmsg
SYS_removexattr
SYS_rename
SYS_renameat
SYS_renameat2
SYS_request_key
SYS_rmdir
SYS_rseq
SYS_rt_sigaction
SYS_rt_sigpending
SYS_rt_sigprocmask
SYS_rt_sigqueueinfo
SYS_rt_sigreturn
SYS_rt_sigsuspend
SYS_rt_sigtimedwait
SYS_rt_tgsigqueueinfo
SYS_sched_get_priority_max
SYS_sched_get_priority_min
SYS_sched_getaffinity
SYS_sched_getattr
SYS_sched_getparam
SYS_sched_getscheduler
SYS_sched_rr_get_interval
SYS_sched_setaffinity
SYS_sched_setattr
SYS_sched_setparam
SYS_sched_setscheduler
SYS_sched_yield
SYS_seccomp
SYS_select
SYS_semctl
SYS_semget
SYS_semop
SYS_semtimedop
SYS_sendfile
SYS_sendmmsg
SYS_sendmsg
SYS_sendto
SYS_set_mempolicy
SYS_set_mempolicy_home_node
SYS_set_robust_list
SYS_set_thread_area
SYS_set_tid_address
SYS_setdomainname
SYS_setfsgid
SYS_setfsuid
SYS_setgid
SYS_setgroups
SYS_sethostname
SYS_setitimer
SYS_setns
SYS_setpgid
SYS_setpriority
SYS_setregid
SYS_setresgid
SYS_setresuid
SYS_setreuid
SYS_setrlimit
SYS_setsid
SYS_setsockopt
SYS_settimeofday
SYS_setuid
SYS_setxattr
SYS_shmat
SYS_shmctl
SYS_shmdt
SYS_shmget
SYS_shutdown
SYS_sigaltstack
SYS_signalfd
SYS_signalfd4
SYS_socket
SYS_socketpair
SYS_splice
SYS_stat
SYS_statfs
SYS_statx
SYS_swapoff
SYS_swapon
SYS_symlink
SYS_symlinkat
SYS_sync
SYS_sync_file_range
SYS_syncfs
SYS_sysinfo
SYS_syslog
SYS_tee
SYS_tgkill
SYS_time
SYS_timer_create
SYS_timer_delete
SYS_timer_getoverrun
SYS_timer_gettime
SYS_timer_settime
SYS_timerfd_create
SYS_timerfd_gettime
SYS_timerfd_settime
SYS_times
SYS_tkill
SYS_truncate
SYS_umask
SYS_umount2
SYS_uname
SYS_unlink
SYS_unlinkat
SYS_unshare
SYS_userfaultfd
SYS_ustat
SYS_utime
SYS_utimensat
SYS_utimes
SYS_vfork
SYS_vhangup
SYS_vmsplice
SYS_wait4
SYS_waitid
SYS_write
SYS_writev

Traits§

Result
Check whether a syscall succeeded or failed.
Result32
Interpret a syscall result as a 32-bit integer.
Result64
Interpret a syscall result as a 64-bit integer.
ResultPtr
Interpret a syscall result as a pointer.
ResultSize
Interpret a syscall result as a pointer-sized integer.