Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

migrated from stackoverflow.com Apr 8 '11 at 10:00

This question came from our site for professional and enthusiast programmers.

It's a Unix system call that creates a file: At a Unix shell prompt, type man 2 creat to learn more.

share|improve this answer
But "creat" does have an e in it. – Nosredna Nov 11 '09 at 17:10
It should have two. ;) – Heath Hunnicutt Nov 11 '09 at 17:36
BTW, he finally did it: github.com/golang/go/commit/… – myaut Jul 9 '15 at 21:02

Not only he refers to man 2 creat system call. He also refers to the obsolete trends to save on every tiny character, where possible, sometimes this being only confusing, especially now, when typing and storing another character is rarely an obstacle.

share|improve this answer
I think in the context of the question he was only referring to creat(). The point he was making was there was nothing about Unix he would have done differently except for this small spelling error in the system call to create a file. – jmucchiello Nov 11 '09 at 8:04
@jmucchiello, it's not a spelling error. It's a deliberate (albeit non-standard) abbreviation. It fits with the heavy use of abbreviations like fcntl, ls, mv, etc, in general. – Matthew Flaschen Apr 13 '11 at 19:15
Agree, but I love those abbrvtns even when we have TBs to store :) – tgkprog Jun 10 '13 at 19:06

It refers to the UNIX system call to create new files. Linkers on some machines were limited to identifiers of at most 6 characters. Apparently, Ken had to work with such a linker and hence the create system call was shortened to creat to match this limitation. The irony is that create does too.

See also: What does the 9th commandment mean?

share|improve this answer
The 6 character limit translated to 5, as the compiler (in order to avoid user symbols clashing with compiler generated ones) prepended a '_' before user variable/function names, and was careful not to use '_' when generating symbols. – vonbrand Mar 14 '13 at 1:08
@vonbrand: That doesn't seem to explain how unlink or umount could exist, however, which I would think are contemporary with creat. – Dolda2000 Jul 11 '15 at 6:23
@Dolda2000 Well, it's quite possible the linker had this limitation, while the compiler did not. So umount would clash with umoun or umounx or whatever, but the name would be allowed. But that's pure speculation :) – Luaan Jul 12 '15 at 7:32

I'm six years late to answer, but I believe that the extant answers all miss the point of Thompson's quote.

I'd spell creat with an 'e'.

Ken Thompson is not lamenting the name of the function used to open and possibly create a file. Rather, he is expressing that Unix was done properly, i.e. there is nothing major that should have been done differently.

The subtle point is that Unix architecture is sound, and the implementations are fine. One would need to bikeshed to find anything to improve in Unix. Thus, the obvious nitpick about the name of a common system call.

share|improve this answer
Right, he wants to tell us, that the UNIX architecture can be improved in very tiny aspects. But basically UNIX has done it right. BTW. creat is a system call not a CLI command. – ikrabbe Jul 9 '15 at 20:59

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.