Reading IO ports in Linux

Reading IO ports in Linux

Post by Jason Arthur Gaym » Thu, 19 Oct 1995 04:00:00



Someone please help! I'm looking for an efficient way to write a program
that reads an IO port once every five or so seconds and updates a few files
before sleeping for the alloted time period and then repeat the process.
What I need help is with reading the /dev/port device--need something to
do the same job as Borland C's inp() command.  I've tried opening /dev/port
with fopen and then using getc with a loop to get all 1024 port values, but
this causes some unexpected trouble with the network cards.  I'm new to
programming C for unix devices so any help will really be appreciated.
Thanks!

-jason.
 
 
 

Reading IO ports in Linux

Post by Michael K. Johns » Thu, 19 Oct 1995 04:00:00



Quote:>do the same job as Borland C's inp() command.  I've tried opening /dev/port
>with fopen and then using getc with a loop to get all 1024 port values, but
>this causes some unexpected trouble with the network cards.

It's likely to*up your whole machine.

Try lseek() and read(), or use fseek() with fgetc().

Here's part of the man page for lseek(), since I recommend that
you use lseek and read() and avoid using stdio for accessing
ports.

LSEEK(2)            Linux Programmer's Manual            LSEEK(2)

NAME
       lseek - reposition read/write file offset

SYNOPSIS
       #include <unistd.h>

       off_t lseek(int fildes, off_t offset, int whence);

DESCRIPTION
       The  lseek  function  repositions  the  offset of the file
       descriptor fildes to the argument offset according to  the
       directive  whence.   The  argument  fildes must be an open
       file  descriptor.   Lseek  repositions  the  file  pointer
       fildes as follows:

              If  whence is SEEK_SET, the offset is set to offset
              bytes.

              If whence is SEEK_CUR, the offset  is  set  to  its
              current location plus offset bytes.

              If  whence  is  SEEK_END,  the offset is set to the
              size of the file plus offset bytes.

       The lseek function allows the file offset to be set beyond
       the  end  of the existing end-of-file of the file. If data
       is later written at this point, subsequent  reads  of  the
       data in the gap return bytes of zeros (until data is actu-
       ally written into the gap).

michaelkjohnson