такое mknod портативный?если нет, какова альтернатива? - PullRequest
1 голос
/ 28 декабря 2010

Я хотел бы использовать mknod в своем коде для создания файла, но man говорит, что

Единственное переносимое использование mknod () - это создание специального файла FIFO. Если mode не S_IFIFO или dev не 0, поведение mknod () не указан.

Значит ли это, что mknod на самом деле не переносим, ​​и я должен использовать другой способ создания функции? Как насчет вызова open и мгновенно close? Какой путь безопаснее?

Ответы [ 2 ]

7 голосов
/ 28 декабря 2010

mknod не для создания файлов.Это для создания узлов устройства .Переносимое приложение никогда не будет нуждаться в создании узлов устройства, потому что, существуют ли они, какие они есть, и как они реализованы / пронумерованы - это подробности реализации .

mknod, исторически позволявшие вамсоздать fifo тоже (и, возможно, обычные файлы?), но вместо этого есть стандартные интерфейсы для этого: mkfifo для fifos и creat (или open с O_CREAT) для обычных файлов.

1 голос
/ 28 декабря 2010

Если вы прочитаете остальную часть этого абзаца, вы увидите:

However, nowadays one should never use mknod() for this purpose;
one should use mkfifo(3), a function especially defined for this purpose.

, так что то, что говорит POSIX.1-2001 здесь, уже устарело.Я бы просто проигнорировал это.mknod все еще используется сценариями инициализации в системах Linux.

...