
  [;1m-spec port_control(Port, Operation, Data) -> iodata() | binary()[0m
  [;1m                      when[0m
  [;1m                          Port :: port() | atom(),[0m
  [;1m                          Operation :: integer(),[0m
  [;1m                          Data :: iodata().[0m

  Performs a synchronous control operation on a port. The meaning of [;;4m[0m
  [;;4mOperation[0m and [;;4mData[0m depends on the port, that is, on the port
  driver. Not all port drivers support this control feature.

  Returns a list of integers in the range 0..255, or a binary,
  depending on the port driver. The meaning of the returned data
  also depends on the port driver.

  Failures:

   • [;;4mbadarg[0m - If [;;4mPort[0m is not an open port or the registered
     name of an open port.

   • [;;4mbadarg[0m - If [;;4mOperation[0m cannot fit in a 32-bit integer.

   • [;;4mbadarg[0m - If the port driver does not support synchronous
     control operations.

   • [;;4mbadarg[0m - If the port driver so decides for any reason
     (probably something wrong with [;;4mOperation[0m or [;;4mData[0m).

  [;;4mWarning[0m

       Do not call [;;4mport_control/3[0m with an unknown [;;4mPort[0m
       identifier and expect [;;4mbadarg[0m exception. Any undefined
       behavior is possible (including node crash) depending on
       how the port driver interprets the supplied arguments.
