PROP_SEND_IOCTL(3)

PROP_SEND_IOCTL(3) | Library Functions Manual | PROP_SEND_IOCTL(3)

# NAME

`prop_array_send_ioctl`, `prop_array_recv_ioctl`, `prop_dictionary_send_ioctl`, `prop_dictionary_recv_ioctl`, `prop_dictionary_sendrecv_ioctl` —
Send and receive property lists to and from the kernel using ioctl

# SYNOPSIS

`#include <prop/proplib.h>`

int
`prop_array_send_ioctl`(prop_array_t array, int fd, unsigned long cmd);

int
`prop_array_recv_ioctl`(int fd, unsigned long cmd, prop_array_t *arrayp);

int
`prop_dictionary_send_ioctl`(prop_dictionary_t dict, int fd, unsigned long cmd);

int
`prop_dictionary_recv_ioctl`(int fd, unsigned long cmd, prop_dictionary_t *dictp);

int
`prop_dictionary_sendrecv_ioctl`(prop_dictionary_t dict, int fd, unsigned long cmd, prop_dictionary_t *dictp);

# DESCRIPTION

The `prop_array_send_ioctl`(), `prop_array_recv_ioctl`(), `prop_dictionary_send_ioctl`(), `prop_dictionary_recv_ioctl`(), and `prop_dictionary_sendrecv_ioctl`() functions implement the user space side of a protocol for sending property lists to and from the kernel using ioctl(2).

# RETURN VALUES

If successful, functions return zero. Otherwise, an error number is returned to indicate the error.

# EXAMPLES

The following (simplified) example demonstrates using `prop_dictionary_send_ioctl`() and `prop_dictionary_recv_ioctl`() in an application:

    void
    foo_setprops(prop_dictionary_t dict)
    {
        int fd;

        fd = open("/dev/foo", O_RDWR, 0640);
        if (fd == -1)
            return;

        (void) prop_dictionary_send_ioctl(dict, fd, FOOSETPROPS);

        (void) close(fd);
    }

    prop_dictionary_t
    foo_getprops(void)
    {
        prop_dictionary_t dict;
        int fd;

        fd = open("/dev/foo", O_RDONLY, 0640);
        if (fd == -1)
    	return (NULL);

        if (prop_dictionary_recv_ioctl(fd, FOOGETPROPS, &dict) != 0)
            return (NULL);

        (void) close(fd);

        return (dict);
    }

The `prop_dictionary_sendrecv_ioctl`() function combines the send and receive functionality, allowing for ioctls that require two-way communication (for example to specify arguments for the ioctl operation).

# ERRORS

`prop_array_send_ioctl`() and `prop_dictionary_send_ioctl`() will fail if:

[`ENOMEM`]
  Cannot allocate memory
[`ENOTSUP`]
  Not supported

`prop_array_recv_ioctl`() and `prop_dictionary_recv_ioctl`() will fail if:

[`EIO`]
  Input/output error
[`ENOTSUP`]
  Not supported

In addition to these, ioctl(2) errors may be returned.

# SEE ALSO

prop_array(3), prop_dictionary(3), proplib(3), prop_copyin_ioctl(9)

# HISTORY

The proplib(3) property container object library first appeared in NetBSD 4.0.

January 21, 2008 | NetBSD 9.0