2010-10-23 26 views
1

我從Linux的移植到FreeBSD並同時將errno失敗碰上::用mknod():mknod(2)需要FreeBSD上的超級用戶才能使用?

[EINVAL]   Creating anything else than a block or character spe- 
        cial file (or a whiteout) is not supported. 

但我也看到它前面的手冊頁指出:

The mknod() system call requires super-user privileges. 

那麼什麼將會是一個很好的替代調用,可以在Linux和FreeBSD上使用?

這種情況出現我的代碼片段:

mode_t mode 
    = S_IFREG | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH; 

if (::mknod(_resolvedName, mode, 0)) { 

我的目標是創建一個具有正確的權限一個空文件。

+0

你想做什麼,這是返回'EINVAL'? – 2010-10-23 22:13:44

+0

@Ignacio Vazquez-Abrams添加代碼片段。 – WilliamKF 2010-10-23 22:16:35

+0

你還沒有告訴我們你想要創造什麼樣的東西。 – bmargulies 2010-10-23 22:26:16

回答

2

根據Linux手冊頁mknod(2)

POSIX.1-2001說:「唯一的便攜使用mknod的(的)是創建一個FIFO專用文件如果mode不是S_IFIFO或者dev不是0,mknod()的行爲是未指定的。

因此,以這種方式使用它是不可移植的,不建議使用。

open(2)但是,似乎有您需要的功能,並將創建一個零大小的文件,便攜式。它接受類型爲mode_t的第三個參數,您可以使用它設置權限。

1

我的目標是創建一個具有正確權限的空文件。

爲什麼不:

std::fstream(_resolvedName); // Temporary object opens and closes in the 
          // same statement thus creating empty file. 
相關問題