Replacements for common libc utility functions.
Since metric library functions need to be async signal safe most standard libc functions can not be used. In addition, even basic syscalls (such as read
and write
) cannot be used without risking corruption of some other metrics that the enclosing profiler might be tracking (for example, bytes read or bytes written).
The following functions can be safely called inside signal handlers and accommodates I/O being done by the metric plugin without corrupting I/O metrics that are tracked by the enclosing profiler.
struct timespec allinea_get_current_time(void)
Gets the current time using the same clock as the enclosing profiler (async-signal-safe
).
A replacement for clock_gettime
that uses the enclosing profiler-preferred system clock (for example, CLOCK_MONOTONIC
).
Returns
The current time.
Examples
See custom1.c.
const char * allinea_get_custom_data (metric_id_t_t metricId)
Returns the customData
attribute of the source element from the metric definition defined in the xml file.
See metric_id_t_t.
Parameters
Parameter | Description |
---|---|
metricId |
The metric id. |
Returns
The custom data for the given metric id. A zero length C string if not available.
void allinea_safe_fprintf(int fd, const char * format,...)
An async-signal-safe version of fprintf
.
void allinea_safe_fprintf ( int fd,
const char * format,
...
)
Parameters
Parameter | Description |
---|---|
fd |
The file descriptor to write to. |
format |
The format string. |
... |
Zero or more values to be substituted into the format string in the same manner as printf . |
int allinea_safe_open(const char * file, int oflags,...)
Opens the given file for reading or writing (async-signal-safe).
int allinea_safe_open ( const char * file,
int oflags,
...
)
A replacement for open
. When used in conjunction with allinea_safe_read()
and allinea_safe_write()
, the bytes read or bytes written is not included in the I/O accounting of the enclosing profiler.
Parameters
Parameter | Description |
---|---|
file |
The name of the file to open (might be an absolute or a relative path). |
oflags |
Flags specifying how the file must be opened. Accepts all the flags that can be given to the libc open function, such as O_RDONLY , O_WRONLY , or O_RDWR . |
Returns
The file descriptor of the open file; -1
on failure and errno set
.
Examples
See custom1.c.
void allinea_safe_printf(const char * format,...)
An async-signal-safe replacement for printf
.
void allinea_safe_printf ( const char * format,
...
)
Parameters
Parameter | Description |
---|---|
format |
The format string. |
... |
Zero or more values to be substituted into the format string in the same manner as printf . |
ssize_t allinea_safe_read(int fd, void * buf, size_t count)
Reads up to count
bytes from buf
to fd
(async-signal-safe
).
ssize_t allinea_safe_read ( int fd,
void * buf,
size_t count
)
A replacement for read
. When used in conjunction with allinea_safe_open()
and allinea_safe_close()
, the read bytes are excluded from the enclosing profiler's I/O accounting.
Parameters
Parameter | Description |
---|---|
fd |
The file descriptor to read from. |
buf |
The buffer to read to. |
count |
The maximum number of bytes to read. |
Returns
The number of bytes actually read; -1
on failure and errno set
.
ssize_t allinea_safe_read_all(int fd, void * buf, size_t count)
Reads the entire contents of fd
into buf
(async-signal-safe
).
ssize_t allinea_safe_read_all ( int fd,
void * buf,
size_t count
)
When used in conjunction with allinea_safe_open()
and allinea_safe_close()
, the read bytes are excluded from the enclosing profiler's I/O accounting.
Parameters
Parameter | Description |
---|---|
fd |
The file descriptor to read from. |
buf |
Buffer in which to copy the contents. |
count |
Size of the buffer. At most, this many bytes are written to buf . |
Returns
If successful, shows the number of bytes read, otherwise -1
and errno
is set.
ssize_t allinea_safe_read_all_with_alloc(int fd, void * buf, size_t * count)
Reads the entire contents of fd
into buf
(async-signal-safe
).
ssize_t allinea_safe_read_all_with_alloc ( int fd,
void ** buf,
size_t * count
)
When used in conjunction with allinea_safe_open()
and allinea_safe_close()
, the read bytes are excluded from the enclosing profiler's I/O accounting.
When this is no longer required, use allinea_safe_free()
to allocate sufficient space for the file contents and add a terminating NULL.
Parameters
Parameter | Description |
---|---|
fd |
The file descriptor to read from. |
buf |
The pointer to when the buffer pointer must be stored. |
count |
Size of the buffer allocated. |
Returns
If successful, shows the the number of bytes read, otherwise -1
and errno
is set.
ssize_t allinea_safe_read_line(int fd, void * buf, size_t count)
Reads a line from fd
into buf
(async-signal-safe
).
ssize_t allinea_safe_read_line ( int fd,
void * buf,
size_t count
)
The final newline \\n
is removed and a final \\0
added. When used in conjunction with allinea_safe_open()
and allinea_safe_close()
, the written bytes are excluded from the enclosing profiler's I/O accounting.
Lines longer than count
are truncated.
Parameters
Parameter | Description |
---|---|
fd |
The file descriptor to read from. |
buf |
Buffer in which to copy the contents. |
count |
Size of the buffer. At most, this many bytes are written to buf . |
Returns
If successful, shows the number of bytes read, otherwise -1
and errno
is set.
Examples
See custom1.c.
void allinea_safe_vfprintf(int fd, const char * format, va_list ap)
An async-signal-safe version of vfprintf
.
void allinea_safe_vfprintf ( int fd,
const char * format,
va_list ap
)
Parameters
Parameter | Description |
---|---|
fd |
The file descriptor to write to. |
format |
The format string. |
ap |
A list of arguments for format. |
ssize_t allinea_safe_write(int fd, const void * buf, size_t count)
Writes up to count
bytes from buf
to fd
(async-signal-safe
).
ssize_t allinea_safe_write ( int fd,
const void * buf,
size_t count
)
A replacement for write
When used in conjunction with allinea_safe_open()
and allinea_safe_close()
, the written bytes are excluded from the I/O accounting of the enclosing profiler.
Parameters
Parameter | Description |
---|---|
fd |
The file descriptor to write to. |
buf |
The buffer to write from. |
count |
The number of bytes to write. |
Returns
The number of bytes actually written; -1
on failure and errno
set.