From Surf Wiki (app.surf) — the open knowledge base
Write (system call)
System call in a Unix-like operating system kernel
System call in a Unix-like operating system kernel
The write is one of the most basic routines provided by a Unix-like operating system kernel. It writes data from a buffer declared by the user to a given device, such as a file. This is the primary way to output data from a program by directly using a system call. The destination is identified by a numeric code. The data to be written, for instance a piece of text, is defined by a pointer and a size, given in number of bytes.
write thus takes three arguments:
- The file code (file descriptor or fd).
- The pointer to a buffer where the data is stored (buf).
- The number of bytes to write from the buffer (nbytes).
POSIX usage
The write call interface is standardized by the POSIX specification. Data is written to a file by calling the write function. The function prototype is:
ssize_t write(int fildes, const void* buf, size_t nbyte);
| Argument | Description | |
|---|---|---|
| `fildes` | The file descriptor obtained from a call to open(). It is an integer value. The values 0, 1, 2 can also be given, for standard input, standard output & standard error, respectively . | |
| `buf` | Points to a character array, with content to be written to the file pointed to by `filedes`. | |
| `nbyte` | Specifies the number of bytes to be written from the character array, `buf`, into the file pointed to by `filedes`. |
In above syntax, ssize_t is a typedef. It is a signed data type defined in stddef.h. Note that write() does not return an unsigned value; it returns -1 if an error occurs so it must return a signed value.
The write function returns the number of bytes successfully written into the file, which may at times be less than the specified nbytes. It returns -1 if an exceptional condition is encountered, see section on errors below.
Linux
Historically, Linux would use different system call tables for different architectures. write has the call number 1 on x86-64, but 4 on ARM. However, more recent architectures supported by Linux have adopted a universal system call table, in which write's call number is 64**.**
When compiling software, the kernel exposes the call numbers for the target architecture as integer constants in the C header ``. Several macros are defined in the form of __NR_xxx, which expand to the call number for the system call xxx. As such, write's call number is exposed as __NR_write. This header may also be included by assembler code using the C preprocessor.
References
References
- http://www.unix.com/man-page/FreeBSD/2/write/ Manual page for Write
- https://www.gnu.org/s/hello/manual/libc/I_002fO-Primitives.html#I_002fO-Primitives I/O Primitives
- "Write".
- "linux/arch/x86/entry/syscalls/syscall_64.tbl at fb4d33ab452ea254e2c319bac5703d1b56d895bf · torvalds/linux".
- "linux/arch/arm64/tools/syscall_32.tbl at fb4d33ab452ea254e2c319bac5703d1b56d895bf · torvalds/linux".
- "linux/scripts/syscall.tbl at fb4d33ab452ea254e2c319bac5703d1b56d895bf · torvalds/linux".
- "linux/include/uapi/linux/unistd.h at fb4d33ab452ea254e2c319bac5703d1b56d895bf · torvalds/linux".
This article was imported from Wikipedia and is available under the Creative Commons Attribution-ShareAlike 4.0 License. Content has been adapted to SurfDoc format. Original contributors can be found on the article history page.
Ask Mako anything about Write (system call) — get instant answers, deeper analysis, and related topics.
Research with MakoFree with your Surf account
Create a free account to save articles, ask Mako questions, and organize your research.
Sign up freeThis content may have been generated or modified by AI. CloudSurf Software LLC is not responsible for the accuracy, completeness, or reliability of AI-generated content. Always verify important information from primary sources.
Report