mknod() - Unix,Linux 系統呼叫 - 技術教學
Tutorials Point


  Unix 初學者指南
  Unix Shell 程式設計
  高階 Unix
  Unix 有用參考
  Unix 有用資源
  精選閱讀

版權所有 © 2014 tutorialspoint



  首頁     參考     討論論壇     關於 TP  

mknod() - Unix,Linux 系統呼叫


previous next AddThis Social Bookmark Button

廣告

名稱

mknod - 建立特殊檔案或普通檔案

語法

#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
#include <unistd.h> 

int mknod(const char *pathname, mode_t mode, dev_t dev);

描述

系統呼叫 mknod() 建立一個名為 pathname 的檔案系統節點(檔案、裝置特殊檔案或命名管道),其屬性由 modedev 指定。

mode 引數指定要使用的許可權和要建立的節點型別。它應該是下面列出的檔案型別之一與新節點的許可權的組合(使用按位或)。

許可權以通常的方式由程序的 umask 修改:建立的節點的許可權為 (mode & ~umask)

檔案型別必須是 S_IFREGS_IFCHRS_IFBLKS_IFIFOS_IFSOCK 之一,分別指定普通檔案(將被建立為空)、字元特殊檔案、塊特殊檔案、FIFO(命名管道)或 Unix 域套接字。(零檔案型別等效於型別 S_IFREG。)

如果檔案型別是 S_IFCHRS_IFBLK,則 dev 指定新建立的裝置特殊檔案的 major 和 minor 編號;否則忽略它。

如果 pathname 已經存在或是一個符號連結,則此呼叫將失敗並出現 EEXIST 錯誤。

新建立的節點將由程序的有效使用者 ID 擁有。如果包含該節點的目錄設定了 set-group-ID 位,或者如果檔案系統以 BSD 組語義掛載,則新節點將從其父目錄繼承組所有權;否則,它將由程序的有效組 ID 擁有。

返回值

mknod() 在成功時返回零,如果發生錯誤則返回 -1(在這種情況下,errno 被適當設定)。

錯誤

標籤描述
EACCES 父目錄不允許程序寫入許可權,或者 pathname 的路徑字首中的一個目錄不允許搜尋許可權。(另請參見 path_resolution(2)。)
EEXIST pathname 已經存在。
EFAULT pathname 指向您可訪問的地址空間之外。
EINVAL mode 請求建立除普通檔案、裝置特殊檔案、FIFO 或套接字以外的其他內容。
ELOOP 在解析 pathname 時遇到太多符號連結。
ENAMETOOLONG
  pathname 太長。
ENOENT pathname 中用作目錄的元件不存在或是一個懸空的符號連結。
ENOMEM 核心記憶體不足。
ENOSPC 包含 pathname 的裝置沒有足夠的空間容納新節點。
ENOTDIR
 pathname 中用作目錄的元件實際上不是目錄。
EPERM mode 請求建立除常規檔案、FIFO(命名管道)或 Unix 域套接字以外的其他內容,並且呼叫者沒有特權(Linux:沒有 CAP_MKNOD 功能);如果包含 pathname 的檔案系統不支援請求的節點型別,也會返回此錯誤。
EROFS pathname 指向只讀檔案系統上的檔案。

符合標準

SVr4、4.4BSD、POSIX.1-2001(但請參見下文)。

備註

POSIX.1-2001 指出:“mknod() 的唯一可移植用途是建立 FIFO 特殊檔案。如果 mode 不是 S_IFIFO 或 dev 不是 0,則 mknod() 的行為未定義。”

在 Linux 下,此呼叫不能用於建立目錄。應該使用 mkdir(2) 建立目錄,使用 mkfifo(2) 建立 FIFO。

NFS 底層協議中存在許多不完善之處。其中一些會影響 mknod()。

參見



previous next Printer Friendly

廣告


  

廣告



廣告