 <p>You're conflating system call numbers with the system call arguments.</p> <p>The system call numbers (e.g. "3 = read") are OS-specific (well, kernel-specific), and sometimes version-specific. For example, see the system call numbers for Linux on x86 <a href="http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html" rel="nofollow">here</a> and on x86_64 <a href="https://filippo.io/linux-syscall-table/" rel="nofollow">here</a>. How the arguments are passed, how the system call is invoked, and what the system call numbers mean are all architecture- and kernel-specific.</p> <p>The number "0" for "standard input" on the other hand is a UNIX standardized value, <code>STDIN_FILENO</code>.</p>