MKFIFO - Linux手册页

时间:2019-08-20 18:00:53  来源:igfitidea点击:

Linux程序员手册 第3部分
更新日期: 2020-08-13

名称

mkfifo,mkfifoat-制作FIFO特殊文件(命名管道)

语法

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

int mkfifo(const char *pathname, mode_t mode);

#include <fcntl.h>           /* Definition of AT_* constants */
#include <sys/stat.h>

int mkfifoat(int dirfd, const char *pathname, mode_t mode);

glibc的功能测试宏要求(请参阅feature_test_macros(7)):

mkfifoat():

Since glibc 2.10:
_POSIX_C_SOURCE>= 200809L
Before glibc 2.10:
_ATFILE_SOURCE

说明

mkfifo()使用名称路径名制作一个FIFO特殊文件。模式指定FIFO的权限。它由进程的umask按常规方式修改:创建的文件的权限为(mode&tiumask)。

FIFO特殊文件与管道相似,区别在于它以不同的方式创建。通过调用mkfifo(),可以将FIFO特殊文件输入到文件系统中,而不是匿名通信通道。

以这种方式创建FIFO特殊文件后,任何进程都可以以与普通文件相同的方式打开该文件以进行读取或写入。但是,必须在两端同时打开它,然后才能继续对其进行任何输入或输出操作。打开FIFO以正常读取块,直到其他进程打开相同的FIFO进行写入为止,反之亦然。有关FIFO特殊文件的非阻塞处理,请参见fifo(7)。

mkfifoat()

mkfifoat()函数的操作与mkfifo()完全相同,除了此处所述的区别。

如果在路径名中给定的路径名​​是相对的,则相对于文件描述符dirfd所引用的目录解释(而不是相对于调用进程的当前工作目录,如相对路径名的mkfifo()那样) 。

如果路径名是相对的并且dirfd是特殊值AT_FDCWD,则路径名将相对于调用进程的当前工作目录进行解释(如mkfifo())。

如果路径名是绝对的,则dirfd被忽略。

返回值

成功时,mkfifo()和mkfifoat()返回0。如果发生错误,则返回-1(在这种情况下,将errno进行适当设置)。

错误说明

EACCES
路径名中的目录之一不允许搜索(执行)权限。
EDQUOT
用户对文件系统上的磁盘块或索引节点的配额已用尽。
EEXIST
路径名已存在。这包括路径名是符号链接(是否悬挂)的情况。
ENAMETOOLONG
路径名的总长度大于PATH_MAX,或者单个文件名组件的长度大于NAME_MAX。在GNU系统中,总文件名长度没有限制,但是某些文件系统可能会限制组件的长度。
ENOENT
路径名中的目录组件不存在或为悬挂的符号链接。
ENOSPC
目录或文件系统没有空间容纳新文件。
ENOTDIR
实际上,在路径名中用作目录的组件不是目录。
EROFS
路径名是指只读文件系统。

mkfifoat()可能会发生以下其他错误:

EBADF
dirfd不是有效的文件描述符。
ENOTDIR
pathname是相对路径,dirfd是引用目录以外的文件的文件描述符。

版本

mkfifoat()已在版本2.4中添加到glibc。它是使用mknodat(2)实现的,从内核2.6.16开始在Linux上可用。

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
mkfifo(),mkfifoat()Thread safetyMT-Safe

遵循规范

mkfifo():POSIX.1-2001,POSIX.1-2008。

mkfifoat():POSIX.1-2008。

另外参见

mkfifo(1),close(2),open(2),read(2),stat(2),umask(2),write(2),fifo(7)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/