port_send, port_sendn - send a user-defined event to a port or list of ports
#include <port.h> int port_send(int port, int events, void *user);
int port_sendn(int ports[], int errors[], uint_t nent, int events, void *user);
The port_send() function submits a user-defined event to a specified port. The port argument is a file descriptor that represents a port. The sent event has its portev_events member set to the value specified in the events parameter and its portev_user member set to the value specified in the user parameter. The portev_object member of an event sent with port_send() is unspecified.
The port_sendn() function submits a user-defined event to multiple ports. The ports argument is an array of file descriptors that represents ports (see port_create(3C)). The nent argument specifies the number of file descriptors in the ports[] array. An event is submitted to each specified port. Each event has its portev_events member set to the value specified in the events parameter and its portev_user member set to the value specified in the user parameter. The portev_object member of events sent with port_sendn() is unspecified.
A port that is in alert mode can be sent an event, but that event will not be retrievable until the port has resumed normal operation. See port_alert(3C).
Upon successful completion, the port_send() function returns 0. Otherwise, it returns -1 and sets errno to indicate the error.
The port_sendn() function returns the number of successfully submitted events. A non-negative return value less than the nent argument indicates that at least one error occurred. In this case, each element of the errors[] array is filled in. An element of the errors[] array is set to 0 if the event was successfully sent to the corresponding port in the ports[] array, or is set to indicate the error if the event was not successfully sent. If an error occurs, the port_sendn() function returns -1 and sets errno to indicate the error.
The port_send() and port_sendn() functions will fail if:
EAGAIN
EBADF
EBADFD
ENOMEM
The port_sendn() function will fail if:
EFAULT
EINVAL
Example 1 Use port_send() to send a user event (PORT_SOURCE_USER) to a port.
The following example uses port_send() to send a user event (PORT_SOURCE_USER) to a port and port_get() to retrieve it. The portev_user and portev_events members of the port_event_t structure are the same as the corresponding user and events arguments of the port_send() function.
#include <port.h> int myport; port_event_t pe; struct timespec timeout; int ret; void *user; myport = port_create(); if (myport) { /* port creation failed ... */ ... return(...); } ... events = 0x01; /* own event definition(s) */ user = <my_own_value>; ret = port_send(myport, events, user); if (ret == -1) { /* error detected ... */ ... close(myport); return (...); } /* * The following code could also be executed from another thread or * process. */ timeout.tv_sec = 1; /* user defined */ timeout.tv_nsec = 0; ret = port_get(myport, &pe, &timeout); if (ret == -1) { /* * error detected : * - EINTR or ETIME : log error code and try again ... * - Other kind of errors : may have to close the port ... */ return(...); } /* * After port_get() returns successfully, the port_event_t * structure will be filled with: * pe.portev_source = PORT_SOURCE_USER * pe.portev_events = 0x01 * pe.portev_object = unspecified * pe.portev_user = <my_own_value> */ ... close(myport);
See setrctl(2) and rctladm(1M) for information on using resource controls.
See attributes(5) for descriptions of the following attributes:
|
rctladm(1M), setrctl(2), port_alert(3C), port_associate(3C), port_create(3C), port_get(3C), attributes(5)
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |