fopen/fread broken under OSF/1 V3.0?

From: Dan Winger <winger_at_sewp.nasa.gov>
Date: Fri, 03 Feb 95 16:45:53 -0500

        I have an Alpha 3000 / Model 600 running OSF/1 V3.0.

I am trying to read the file "/var/adm/utmp" with a program I am
writing. I am following all of the necessary rules, that I am aware
of, to compile and run this program. The program works fine when
it is compiled and executed under Solaris 2.3 on a Sun SparcServer 10,
but not here.

Running the broken program using "dbx":

# dbx
enter object file name (default is `a.out'):
dbx version 3.11.6
Type 'help' for help.

main: 26 int i=0;
(dbx) run
readut: Error 0
DATE/TIME USER INIT PID STATUS HOST
---------------------------- ------------ ---------------- ------ -------------------- -------------------------
sizeof(struct utmp) = 156
About to read
signal Segmentation fault at [memcpy:78 ,0x3ff8083b2e4] Source not available
(dbx) where
> 0 memcpy(0x3ff80862a78, 0x3ffc0800678, 0x2, 0x9c, 0x3ff00000000) ["../../../../../src/usr/ccs/lib/libc/alpha/memcpy.s":78, 0x3ff8083b2e4]
   1 fread(0x140000188, 0x9c, 0x1, 0x0, 0x0) ["../../../../../src/usr/ccs/lib/libc/fread.c":154, 0x3ff80862b04]
   2 main() ["readut.c":54, 0x1200015e8]
(dbx)

------------------------------------------------------------------------------

Here is the source code that I am running:

#include <stdio.h>
#include <utmp.h>
#include <time.h>
#include <errno.h>
#include <string.h>

/* _at_ timestamp */

char *timestamp (time_t timeval)
{
struct tm *tp ;
static char buffer [64] ;

tp = localtime (&timeval) ;

/* Put the date into the format yyyy mmm dd */

strftime (buffer, sizeof(buffer), "%C", tp) ;
return buffer ;
}

main()
{
  FILE *fd;
  struct utmp *ut;
  int i=0;
  char *ut_type[10];
  size_t j,k;

  ut_type[0] = "Empty ";
  ut_type[1] = "Run Level ";
  ut_type[2] = "Boot Time ";
  ut_type[3] = "Old Time ";
  ut_type[4] = "New Time ";
  ut_type[5] = "Init Process ";
  ut_type[6] = "Login Process";
  ut_type[7] = "User Process ";
  ut_type[8] = "Dead Process ";
  ut_type[9] = "Accounting ";

  fd = fopen("/var/adm/utmp","r");
  perror("readut");
  ferror(fd);

  rewind(fd);

  printf("DATE/TIME USER INIT PID STATUS HOST\n");
  printf("---------------------------- ------------ ---------------- ------ -------------------- -------------------------\n");

  k = sizeof(struct utmp);
  printf("sizeof(struct utmp) = %d\n",k);

  printf("About to read\n");
  j=fread(ut,sizeof(struct utmp),1,fd);
  perror("readut");
  printf("After read j=%d\n",j);

  while(j>0)
    {
      printf("%s ",timestamp(ut->ut_time));
      printf("%12s ",ut->ut_user);
      printf("%16s ",ut->ut_id);
      printf("%6d ",ut->ut_pid);
      printf("%s ",ut_type[ut->ut_type]);
      printf("%s\n",ut->ut_host);
      if(++i==24)
        {
          i=0;
          sleep(2);
          printf("\n");
          printf("DATE/TIME USER INIT PID STATUS HOST\n");
          printf("---------------------------- ------------ ---------------- ------ -------------------- -------------------------\n");
        }
      printf("About to read\n");
      j=fread(ut,sizeof(struct utmp),1,fd);
      perror("readut");
      printf("After read\n");
    }

  fclose(fd);
}

-----------------------------------------------------------------------

        It's a very simple, straight forward program. Is this a bug in
the C compiler that I am using? The C compiler is the one that came with the
operating system. Any help would be appreciated.

Thank You.

Dan Winger __ _ * ) * NASA-Goddard Space Flight Center
SEWP BOWL (soop bol) * _ ( \\ * RMS Technologies Inc.
winger_at_sewp.nasa.gov * (_X__//_ * Code 251.9
301.286.7658 * ( ) * Bldg 18 Room 274
FAX 301.286.1619 * \______/ * Greenbelt, MD 20771
Received on Fri Feb 03 1995 - 16:46:57 NZDT

This archive was generated by hypermail 2.4.0 : Wed Nov 08 2023 - 11:53:45 NZDT