---
title: VNOP_IOCTL
framework: Kernel
role: symbol
role_heading: Function
platforms: [macOS 10.4+]
path: kernel/1586258-vnop_ioctl
---

# VNOP_IOCTL

Call down to a filesystem or device driver to execute various control operations on or request data about a file.

## Declaration

```occ
errno_t VNOP_IOCTL(vnode_t vp, u_long command, caddr_t data, int fflag, vfs_context_t ctx);
```

## Parameters

- `vp`: The vnode to execute the command on.
- `command`: Identifier for action to take.
- `data`: Pointer to data; this can be an integer constant (of 32 bits only) or an address to be read from or written to, depending on "command." If it is an address, it is valid and resides in the kernel; callers of VNOP_IOCTL() are responsible for copying to and from userland.
- `ctx`: Context against which to authenticate ioctl request.

## Return Value

Return Value 0 for success or a filesystem-specific error.

## Discussion

Discussion Ioctl controls are typically associated with devices, but they can in fact be passed down for any file; they are used to implement any of a wide range of controls and information requests. fcntl() calls VNOP_IOCTL for several commands, and will attempt a VNOP_IOCTL if it is passed an unknown command, though no copyin or copyout of arguments can occur in this case--the "arg" must be an integer value. Filesystems can define their own fcntls using this mechanism. How ioctl commands are structured is slightly complicated; see the manual page for ioctl(2).

## See Also

### Support

- [nop_access](kernel/1523716-nop_access.md)
- [nop_advlock](kernel/1523779-nop_advlock.md)
- [nop_allocate](kernel/1523773-nop_allocate.md)
- [nop_blktooff](kernel/1523748-nop_blktooff.md)
- [nop_blockmap](kernel/1523729-nop_blockmap.md)
- [nop_bwrite](kernel/1523755-nop_bwrite.md)
- [nop_close](kernel/1523718-nop_close.md)
- [nop_copyfile](kernel/1523720-nop_copyfile.md)
- [nop_create](kernel/1523722-nop_create.md)
- [nop_exchange](kernel/1523694-nop_exchange.md)
- [nop_fsync](kernel/1523723-nop_fsync.md)
- [nop_getattr](kernel/1523698-nop_getattr.md)
- [nop_inactive](kernel/1523711-nop_inactive.md)
- [nop_ioctl](kernel/1523715-nop_ioctl.md)
- [nop_link](kernel/1523693-nop_link.md)
- [nop_mkdir](kernel/1523677-nop_mkdir.md)
- [nop_mknod](kernel/1523731-nop_mknod.md)
- [nop_mmap](kernel/1523753-nop_mmap.md)
- [nop_offtoblk](kernel/1523783-nop_offtoblk.md)
- [nop_open](kernel/1523733-nop_open.md)
- [nop_pagein](kernel/1523686-nop_pagein.md)
- [nop_pageout](kernel/1523770-nop_pageout.md)
- [nop_pathconf](kernel/1523727-nop_pathconf.md)
- [nop_read](kernel/1523765-nop_read.md)
- [nop_readdir](kernel/1523710-nop_readdir.md)
- [nop_readdirattr](kernel/1523717-nop_readdirattr.md)
- [nop_readlink](kernel/1523774-nop_readlink.md)
- [nop_reclaim](kernel/1523708-nop_reclaim.md)
- [nop_remove](kernel/1523713-nop_remove.md)
- [nop_rename](kernel/1523741-nop_rename.md)
- [nop_revoke](kernel/1523764-nop_revoke.md)
- [nop_rmdir](kernel/1523767-nop_rmdir.md)
- [nop_searchfs](kernel/1523744-nop_searchfs.md)
- [nop_select](kernel/1523738-nop_select.md)
- [nop_setattr](kernel/1523719-nop_setattr.md)
- [nop_strategy](kernel/1523746-nop_strategy.md)
- [nop_symlink](kernel/1523696-nop_symlink.md)
- [nop_whiteout](kernel/1523682-nop_whiteout.md)
- [nop_write](kernel/1523695-nop_write.md)
- [err_access](kernel/1523742-err_access.md)
- [err_advlock](kernel/1523766-err_advlock.md)
- [err_allocate](kernel/1523740-err_allocate.md)
- [err_blktooff](kernel/1523777-err_blktooff.md)
- [err_blockmap](kernel/1523771-err_blockmap.md)
- [err_bwrite](kernel/1523737-err_bwrite.md)
- [err_close](kernel/1523768-err_close.md)
- [err_copyfile](kernel/1523763-err_copyfile.md)
- [err_create](kernel/1523690-err_create.md)
- [err_exchange](kernel/1523683-err_exchange.md)
- [err_fsync](kernel/1523761-err_fsync.md)
- [err_getattr](kernel/1523757-err_getattr.md)
- [err_inactive](kernel/1523681-err_inactive.md)
- [err_ioctl](kernel/1523684-err_ioctl.md)
- [err_link](kernel/1523732-err_link.md)
- [err_mkdir](kernel/1523751-err_mkdir.md)
- [err_mknod](kernel/1523750-err_mknod.md)
- [err_mmap](kernel/1523704-err_mmap.md)
- [err_offtoblk](kernel/1523781-err_offtoblk.md)
- [err_open](kernel/1523735-err_open.md)
- [err_pagein](kernel/1523688-err_pagein.md)
- [err_pageout](kernel/1523700-err_pageout.md)
- [err_pathconf](kernel/1523679-err_pathconf.md)
- [err_read](kernel/1523775-err_read.md)
- [err_readdir](kernel/1523691-err_readdir.md)
- [err_readdirattr](kernel/1523705-err_readdirattr.md)
- [err_readlink](kernel/1523739-err_readlink.md)
- [err_reclaim](kernel/1523726-err_reclaim.md)
- [err_remove](kernel/1523769-err_remove.md)
- [err_rename](kernel/1523706-err_rename.md)
- [err_revoke](kernel/1523736-err_revoke.md)
- [err_rmdir](kernel/1523772-err_rmdir.md)
- [err_searchfs](kernel/1523702-err_searchfs.md)
- [err_select](kernel/1523714-err_select.md)
- [err_setattr](kernel/1523786-err_setattr.md)
- [err_strategy](kernel/1523730-err_strategy.md)
- [err_symlink](kernel/1523759-err_symlink.md)
- [err_whiteout](kernel/1523785-err_whiteout.md)
- [err_write](kernel/1523725-err_write.md)
- [advisory_read](kernel/1463716-advisory_read.md)
- [advisory_read_ext](kernel/1463707-advisory_read_ext.md)
- [VNOP_BWRITE](kernel/1585961-vnop_bwrite.md)
- [VNOP_FSYNC](kernel/1586212-vnop_fsync.md)
- [VNOP_GETXATTR](kernel/1586289-vnop_getxattr.md)
- [VNOP_READ](kernel/1586326-vnop_read.md)
- [VNOP_SETXATTR](kernel/1586200-vnop_setxattr.md)
- [VNOP_STRATEGY](kernel/1586257-vnop_strategy.md)
- [VNOP_WRITE](kernel/1586129-vnop_write.md)
- [cache_enter](kernel/1562285-cache_enter.md)
- [cache_lookup](kernel/1562195-cache_lookup.md)
- [cache_purge](kernel/1562225-cache_purge.md)
- [cache_purge_negatives](kernel/1562456-cache_purge_negatives.md)
