Имейте в виду, что _write - это/очень/сложный системный вызов. Поскольку он функционирует на дескрипторе файла, который может быть файлом на любом типе файловой системы или даже в сетевом сокете, он в основном отбрасывает места по всему ядру.
Страница вики-страницы, на которую вы ссылаетесь, является правильным местом, чтобы начать понимать системные вызовы FreeBSD. пишите, вероятно, не самый лучший syscall, чтобы использовать их для понимания, если это то, что вы пытаетесь сделать.
Реализация системного вызова записи (от FreeBSD 10.0-RELEASE):
/usr/src/sys/kern/sys_generic.c:358
#ifndef _SYS_SYSPROTO_H_
struct write_args {
int fd;
const void *buf;
size_t nbyte;
};
#endif
int
sys_write(td, uap)
struct thread *td;
struct write_args *uap;
{
struct uio auio;
struct iovec aiov;
int error;
if (uap->nbyte > IOSIZE_MAX)
return (EINVAL);
aiov.iov_base = (void *)(uintptr_t)uap->buf;
aiov.iov_len = uap->nbyte;
auio.uio_iov = &aiov;
auio.uio_iovcnt = 1;
auio.uio_resid = uap->nbyte;
auio.uio_segflg = UIO_USERSPACE;
error = kern_writev(td, uap->fd, &auio);
return(error);
}
Если кто также заинтересован в Linux SYSCALL в, LWN имеет некоторые большие сообщения об этом https://lwn.net/Articles/ 604287/ –