Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::experi...racter_file(3)  C++ Standard Libary std::experi...racter_file(3)

NAME
       std::experimental::filesystem::is_character_file	   -   std::experimen-
       tal::filesystem::is_character_file

Synopsis
	  Defined in header <experimental/filesystem>
	  bool	is_character_file(  file_status	  s   );		   (1)
       (filesystem TS)
	  bool	 is_character_file(   const  path&  p  );		   (2)
       (filesystem TS)
	  bool is_character_file( const	path& p, error_code& ec	);

	  Checks if the	given file status or path corresponds to  a  character
       special file, as
	  if  determined by POSIX S_ISCHR. Examples of character special files
       are character
	  devices such as /dev/null, /dev/tty, /dev/audio,  or	/dev/nvram  on
       Linux.

	  1) Equivalent	to s.type() == file_type::character.
	  2)   Equivalent   to	 is_character_file(status(p))	or  is_charac-
       ter_file(status(p, ec))
	  respectively

Parameters
	  s  - file status to check
	  p  - path to examine
	  ec - out-parameter for error reporting in the	non-throwing overload

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

Exceptions
	  1)
	  noexcept specification:
	  noexcept
	  2,3) The overload that does not take a error_code& parameter	throws
       filesystem_error
	  on  underlying  OS API errors, constructed with p as the first argu-
       ment and	the OS
	  error	code as	the error code argument. std::bad_alloc	may be	thrown
       if memory
	  allocation  fails.  The overload taking a error_code&	parameter sets
       it to the OS API
	  error	code if	an OS API call fails, and executes  ec.clear()	if  no
       errors occur. This
	  overload has
	  noexcept specification:
	  noexcept

Notes
	  The  information  provided by	this function is usually also provided
       as a byproduct of
	  directory iteration. During directory	iteration, calling
	  is_character_file(*iterator) is less efficient than
	  is_character_file(iterator->status())

Example
       // Run this code

	#include <iostream>
	#include <fstream>
	#include <cstdio>
	#include <cstring>
	#include <experimental/filesystem>
	#include <unistd.h>
	#include <sys/socket.h>
	#include <sys/un.h>
	#include <sys/stat.h>

	namespace fs = std::experimental::filesystem;

	void demo_status(const fs::path& p, fs::file_status s)
	{
	    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 de-
       vice\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";
	}
	int main()
	{
	    // create files of different kinds
	    fs::create_directory("sandbox");
	    std::ofstream("sandbox/file"); // create regular file
	    fs::create_directory("sandbox/dir");
	    mkfifo("sandbox/pipe", 0644);
	    struct sockaddr_un addr;
	    addr.sun_family = AF_UNIX;
	    std::strcpy(addr.sun_path, "sandbox/sock");
	    int	fd = socket(PF_UNIX, SOCK_STREAM, 0);
	    bind(fd, (struct sockaddr*)&addr, sizeof addr);
	    fs::create_symlink("file", "sandbox/symlink");

	    // demo different status accessors
	    for(auto it	= fs::directory_iterator("sandbox"); it	!=  fs::direc-
       tory_iterator();	++it)
		demo_status(*it,  it->symlink_status());  // use cached	status
       from directory entry
	    demo_status("dev/null", fs::status("/dev/null")); // direct	 calls
       to status
	    demo_status("dev/sda", fs::status("/dev/sda"));
	    demo_status("sandbox/no", fs::status("/sandbox/no"));

	    // cleanup
	    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
	  status	  determines file attributes
	  symlink_status   determines  file  attributes,  checking the symlink
       target
			  (function)
	  file_status	  represents file type and permissions
			  (class)
	  status_known	  checks whether file status is	known
			  (function)
	  is_block_file	  checks whether the given path	refers to block	device
			  (function)
	  is_directory	  checks whether the given path	refers to a directory
			  (function)
	  is_fifo	  checks whether the given path	refers to a named pipe
			  (function)
	  is_other	  checks whether the argument refers to	an other file
			  (function)
	  is_regular_file checks whether the argument refers to	a regular file
			  (function)
	  is_socket	  checks whether the argument refers to	 a  named  IPC
       socket
			  (function)
	  is_symlink	   checks  whether  the	 argument refers to a symbolic
       link
			  (function)
	  exists	  checks whether path refers to	existing  file	system
       object
			  (function)
			  cached  status of the	file designated	by this	direc-
       tory entry
	  status	  cached symlink_status	of the file designated by this
       directory entry
	  symlink_status  (public member function of
			  std::experimental::filesystem::directory_entry)

http://cppreference.com		  2022.07.31	  std::experi...racter_file(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::experimental::filesystem::is_character_file&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help