std::experimental::filesystem:: is_socket
|
Definido en el encabezado
<experimental/filesystem>
|
||
|
bool
is_socket
(
file_status s
)
;
|
(1) | (filesystem TS) |
|
bool
is_socket
(
const
path
&
p
)
;
bool is_socket ( const path & p, error_code & ec ) ; |
(2) | (filesystem TS) |
Comprueba si el estado del archivo o la ruta proporcionada corresponde a un socket IPC nombrado, como si fuera determinado por el estándar POSIX S_IFSOCK .
Contenidos |
Parámetros
| s | - | estado del archivo a verificar |
| p | - | ruta a examinar |
| ec | - | parámetro de salida para reporte de errores en la sobrecarga no lanzadora |
Valor de retorno
true si el archivo indicado por p o si el tipo indicado por s se refiere a un socket con nombre. La sobrecarga que no lanza excepciones devuelve false si ocurre un error.
Excepciones
Notas
Los sockets con nombre son sockets de dominio UNIX construidos con las APIs POSIX socket y bind , que pueden utilizarse para comunicación interprocesos avanzada. En particular, pueden emplearse para transferir descriptores de archivo abiertos de un proceso en ejecución a otro.
La información proporcionada por esta función generalmente también se ofrece como un subproducto de la iteración de directorios. Durante la iteración de directorios, llamar
is_socket(*iterator)
es menos eficiente que
is_socket(iterator->status())
.
Ejemplo
#include <cstdio> #include <cstring> #include <experimental/filesystem> #include <fstream> #include <iostream> #include <sys/socket.h> #include <sys/stat.h> #include <sys/un.h> #include <unistd.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 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"; } 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::directory_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"); }
Salida posible:
"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
Véase también
|
determina los atributos del archivo
determina los atributos del archivo, verificando el destino del enlace simbólico (función) |
|
|
representa el tipo de archivo y permisos
(clase) |
|
|
verifica si el estado del archivo es conocido
(función) |
|
|
verifica si la ruta dada se refiere a un dispositivo de bloques
(función) |
|
|
verifica si la ruta dada se refiere a un dispositivo de caracteres
(función) |
|
|
verifica si la ruta dada se refiere a un directorio
(función) |
|
|
verifica si la ruta dada se refiere a una tubería con nombre
(función) |
|
|
verifica si el argumento se refiere a un archivo
otro
(función) |
|
|
verifica si el argumento se refiere a un archivo regular
(función) |
|
|
verifica si el argumento se refiere a un enlace simbólico
(función) |
|
|
verifica si la ruta se refiere a un objeto del sistema de archivos existente
(función) |
|
|
estado en caché del archivo designado por esta entrada de directorio
symlink_status en caché del archivo designado por esta entrada de directorio (función miembro pública de
std::experimental::filesystem::directory_entry
)
|