POSIX все еще требует вызова creat()
, но нет очевидной причины, по которой он не может быть реализован следующим образом:
static inline int creat(const char *name, int mode)
{
return open(name, O_WRONLY|O_CREAT|O_TRUNC, mode);
}
Действительно, POSIX говорит, что он должен бытьреализовано , как если бы было так (дать или взять квалификаторы static inline
).
Когда был создан creat()
, у open()
не было опций для создания файлов;он мог только открыть существующие файлы. У него не было всех O_xyz
имен;Вы использовали 0
(для O_RDONLY
), 1
(для O_WRONLY
) и 2
(для O_RDWR
) - и это были все доступные варианты.
В настоящее время, с«переменные аргументы» версии open()
(да, третий, аргумент mode является необязательным), вам больше не нужен creat()
- вы можете сделать все это с помощью open()
и затем некоторых.
Нет необходимости, чтобы creat()
был системным вызовом, отдельным от open()
, поэтому большинство современных кодов (скажем, код, написанный в текущем тысячелетии) в любом случае не использует creat()
. Я не знаю, когда я в последний раз писал код, используя creat()
- это было давно время назад. (Я искал свой исходный код; было две программы, все еще с вызовами creat()
, но оба эти вызова были в версии 1.1 кода, датированной январем и февралем 1990 года. У меня нет никаких записей об использовании этого в моем собственномкод с тех пор.)