There are 5 application level system calls normally supported by Linux character-type drivers (bulk of Linux drivers, e.g. V4L2 video driver)
open, close, read, write, ioctl
The first four are pretty self-explanatory, but the last one is of particular interest since the ioctl function is used is to send request (known as IOCTLs or IO control requests) from the application to the driver. Each Linux driver standard (V4L2, FBDev, ALSA, OSS,...) defines a corresponding set of standardized IOCTLs which the drivers conforming to those standards support; thereby allowing portability of application from one platform to the next.
In a typical scenario, an application would first call open to get handle to the device drive, then issue a few ioctl calls to configure device (get capabilities, set desired video frame size...) and spend the bulk of its time issuing read, write, and ioctl requests; finally, it would issue a close to release the driver handle before exiting.