ONPOSIX  2.0
 All Classes Namespaces Files Functions Variables Enumerator Friends Macros Pages
FifoDescriptor Class Reference

Abstraction of a fifo (AKA "named pipe") descriptor. More...

#include <FifoDescriptor.hpp>

Inheritance diagram for FifoDescriptor:
Inheritance graph

Public Member Functions

 FifoDescriptor (const std::string &name, const int flags)
 Constructor for descriptors of fifos.
 FifoDescriptor (const std::string &name, const int flags, const mode_t mode)
 Constructor for descriptors of fifos.
int getCapacity ()
 Method to get the capacity of the fifo.
- Public Member Functions inherited from PosixDescriptor
virtual ~PosixDescriptor ()
 Destructor.
void async_read (void(*handler)(Buffer *b, size_t size), Buffer *b, size_t size)
 Run asynchronous read operation.
void async_read (void(*handler)(void *b, size_t size), void *b, size_t size)
 Run asynchronous read operation.
void async_write (void(*handler)(Buffer *b, size_t size), Buffer *b, size_t size)
 Run asynchronous write operation.
void async_write (void(*handler)(void *b, size_t size), void *b, size_t size)
 Run asynchronous write operation.
int read (Buffer *b, size_t size)
 Method to read from the descriptor and fill a buffer.
int read (void *p, size_t size)
 Method to read from the descriptor.
int write (Buffer *b, size_t size)
 Method to write data in a buffer to the descriptor.
int write (const void *p, size_t size)
 Method to write to the descriptor.
int write (const std::string &s)
 Method to write a string to the descriptor.
virtual void close ()
 Method to close the descriptor.
int getDescriptorNumber () const
 Method to get descriptor number.
 PosixDescriptor (const PosixDescriptor &src)
 Copy constructor.
PosixDescriptoroperator= (const PosixDescriptor &src)
 Assignment operator.
bool flush ()
 Method to flush this specific descriptor.
int ioctl (int request)
 Ioctl on the file descriptor.
int ioctl (int request, void *argp)
 Ioctl on the file descriptor.

Additional Inherited Members

- Protected Member Functions inherited from PosixDescriptor
int do_read (void *p, size_t size)
 Low-level read.
int do_write (const void *p, size_t size)
 Low-level write.
 PosixDescriptor ()
 Constructor.
- Protected Attributes inherited from PosixDescriptor
int fd_
 Number of the file descriptor.

Detailed Description

Abstraction of a fifo (AKA "named pipe") descriptor.

This is an abstract class for the concept of fifo. The descriptor corresponds to an open fifo.

Example of usage:

FifoDescriptor fd ("/tmp/myfifo", O_RDONLY);
Buffer b (10);
fd.read (b, b.getSize());

Definition at line 41 of file FifoDescriptor.hpp.

Constructor & Destructor Documentation

FifoDescriptor ( const std::string &  name,
const int  flags 
)

Constructor for descriptors of fifos.

It calls open() with the given flags.

Parameters
nameof the fifo
flagsthat can be
  • O_RDONLY
  • O_WRONLY
  • or O_RDWR
or-ed with zero or more flags:
  • O_APPEND
  • O_ASYNC
  • O_CREAT
  • O_NONBLOCK
  • O_SYNC
Exceptions
runtime_errorif the ::open() returns an error

Definition at line 49 of file FifoDescriptor.cpp.

{
DEBUG("Opening fifo...");
fd_ = open(name.c_str(), flags);
if (fd_ <= 0) {
ERROR("Opening fifo " << name);
throw std::runtime_error ("Open fifo error");
}
}
FifoDescriptor ( const std::string &  name,
const int  flags,
const mode_t  mode 
)

Constructor for descriptors of fifos.

It calls open() with the given flags.

Parameters
nameof the file
flagsthat can be
  • O_RDONLY
  • O_WRONLY
  • or O_RDWR
or-ed with zero or more flags:
  • O_APPEND
  • O_ASYNC
  • O_CREAT
  • O_NONBLOCK
  • O_SYNC
modecan be
  • S_IRWXU 00700 user (file owner) has read, write and execute permission
  • S_IRUSR 00400 user has read permission
  • S_IWUSR 00200 user has write permission
  • S_IXUSR 00100 user has execute permission
  • S_IRWXG 00070 group has read, write and execute permission
  • S_IRGRP 00040 group has read permission
  • S_IWGRP 00020 group has write permission
  • S_IXGRP 00010 group has execute permission
  • S_IRWXO 00007 others have read, write and execute permission
  • S_IROTH 00004 others have read permission
  • S_IWOTH 00002 others have write permission
  • S_IXOTH 00001 others have execute permission
Exceptions
runtime_errorif the ::open() returns an error

Definition at line 96 of file FifoDescriptor.cpp.

{
fd_ = open(name.c_str(), flags, mode);
if (fd_ <= 0) {
ERROR("Opening fifo " << name);
throw std::runtime_error ("Open fifo error");
}
}

Member Function Documentation

int getCapacity ( )

Method to get the capacity of the fifo.

Returns
length of data available on the file; -1 in case of error or unlimited capacity
Exceptions
runtime_errorin case it's not possible to get the capacity

Definition at line 115 of file FifoDescriptor.cpp.

{
long int v;
errno = 0;
if ((v = fpathconf(fd_,_PC_PIPE_BUF)) == -1)
if (errno != 0) {
ERROR("Can't get fifo capacity");
throw std::runtime_error ("Fifo capacity error");
return -1;
}
return v;
}

The documentation for this class was generated from the following files: