Why does the open
system call not need a buffer size parameter like the write
system call does?
How do these two system calls treat their strin
UNIX was developed as an operating system for programs written in assembly, later for programs written in C. In the assembly convention the UNIX team uses and later in C, strings are terminated with NUL bytes. Thus it is only natural to use the same convention when talking to the operating system. Linus copied the UNIX API when designing Linux, so that's why it has the same design. No functionality is lost by terminating strings with NUL as NUL bytes are not allowed to appear in paths or other identifiers.
A write
call writes arbitrary binary data to a file. This data is not necessarily text thus using the string convention doesn't make much sense.