std::filesystem::is_fifo - cppreference.com

From cppreference.com

Defined in header

<filesystem>

boolis_fifo(std::filesystem::file_statuss)noexcept; (1) (since C++17)boolis_fifo(conststd::filesystem::path&p); (2) (since C++17)boolis_fifo(conststd::filesystem::path&p,std::error_code&ec)noexcept; (3) (since C++17)Checks if the given file status or path corresponds to a FIFO or pipe file as if determined by POSIX

S_ISFIFO

.

1) Equivalent to s.type()==file_type::fifo.

2,3) Equivalent to is_fifo(status(p)) or is_fifo(status(p,ec)) respectively.

Parameters

s - file status to check p - path to query ec - error code to modify in case of errors Return value

true if the file indicated by p or if the type indicated s refers to a FIFO pipe, false otherwise. The non-throwing overload returns false if an error occurs.

Exceptions

Any overload not marked noexcept may throw

std::bad_alloc

if memory allocation fails.

2,3) Sets a std::error_code& parameter to the OS API error code if an OS API call fails, and executes ec.

clear

() if no errors occur.

Example

Run this code

#include<cstdio>#include<cstring>#include<filesystem>#include<fstream>#include<iostream>#include<sys/socket.h>#include<sys/stat.h>#include<sys/un.h>#include<unistd.h>namespacefs=std::filesystem;voiddemo_status(constfs::path&p,fs::file_statuss){std::cout<<p;// alternative: switch(s.type()) { case fs::file_type::regular: ...}if(fs::is_regular_file(s))std::cout<<" is a regular file\n";if(fs::is_directory(s))std::cout<<" is a directory\n";if(fs::is_block_file(s))std::cout<<" is a block device\n";if(fs::is_character_file(s))std::cout<<" is a character device\n";if(fs::is_fifo(s))std::cout<<" is a named IPC pipe\n";if(fs::is_socket(s))std::cout<<" is a named IPC socket\n";if(fs::is_symlink(s))std::cout<<" is a symlink\n";if(!fs::exists(s))std::cout<<" does not exist\n";}intmain(){// create files of different kindsfs::create_directory("sandbox");fs::create_directory("sandbox/dir");std::ofstream{"sandbox/file"};// create regular filefs::create_symlink("file","sandbox/symlink");mkfifo("sandbox/pipe",0644);sockaddr_unaddr;addr.sun_family=AF_UNIX;std::strcpy(addr.sun_path,"sandbox/sock");intfd=socket(PF_UNIX,SOCK_STREAM,0);bind(fd,reinterpret_cast<sockaddr*>(&addr),sizeofaddr);// demo different status accessorsfor(autoit{fs::directory_iterator("sandbox")};it!=fs::directory_iterator();++it)demo_status(*it,it->symlink_status());// use cached status from directory entrydemo_status("/dev/null",fs::status("/dev/null"));// direct calls to statusdemo_status("/dev/sda",fs::status("/dev/sda"));demo_status("sandbox/no",fs::status("/sandbox/no"));// cleanup (prefer std::unique_ptr-based custom deleters)close(fd);fs::remove_all("sandbox");}Possible output:

"sandbox/file" is a regular file "sandbox/dir" is a directory "sandbox/pipe" is a named IPC pipe "sandbox/sock" is a named IPC socket "sandbox/symlink" is a symlink "/dev/null" is a character device "/dev/sda" is a block device "sandbox/no" does not exist See also

statussymlink_status

(C++17)(C++17)

determines file attributes
determines file attributes, checking the symlink target
(function)

[edit]

file_status

(C++17)

represents file type and permissions
(class)

[edit]

status_known

(C++17)

checks whether file status is known
(function)

[edit]

is_block_file

(C++17)

checks whether the given path refers to block device
(function)

[edit]

is_character_file

(C++17)

checks whether the given path refers to a character device
(function)

[edit]

is_directory

(C++17)

checks whether the given path refers to a directory
(function)

[edit]

is_other

(C++17)

checks whether the argument refers to an other file
(function)

[edit]

is_regular_file

(C++17)

checks whether the argument refers to a regular file
(function)

[edit]

is_socket

(C++17)

checks whether the argument refers to a named IPC socket
(function)

[edit]

is_symlink

(C++17)

checks whether the argument refers to a symbolic link
(function)

[edit]

exists

(C++17)

checks whether path refers to existing file system object
(function)

[edit]

is_fifo

checks whether the directory entry refers to a named pipe
(public member function of std::filesystem::directory_entry)

[edit]