Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #5948

Re: looking at binary files with C

From Uno <Uno@example.invalid>
Newsgroups comp.lang.c
Subject Re: looking at binary files with C
Date 2011-06-12 19:48 -0600
Message-ID <95l8ijFfpjU1@mid.individual.net> (permalink)
References <95j3bgFj2qU1@mid.individual.net> <1bk4crnhkt.fsf@snowball.wb.pfeifferfamily.net> <95kmvoFn2bU1@mid.individual.net> <it3od3$j3j$1@dont-email.me>

Show all headers | View raw


On 06/12/2011 07:16 PM, James Waldby wrote:

> That code is quite ugly and limited (value of SIZE is irrelevantly
> based on a specific file's size), besides having the undefined-
> behavior problem that other posters mentioned, in "a[c] = ++a[c]".
> I suggest that you instead use code like the following:
>
>      while (1) {
>         c = fgetc(fp);
>         if (c == EOF) break;
>         ++a[c];
>         ++counter;
>      }
>
> Some people prefer to do the read and EOF test in one line:
>         if ((c = fgetc(fp)) == EOF) break;
>

Thx, james, I like the main control a lot better now:

$ cc -Wall -Wextra hist10.c -o hist
hist10.c: In function ‘main’:
hist10.c:18: warning: unused variable ‘j’
hist10.c:17: warning: unused variable ‘a’
hist10.c:15: warning: unused variable ‘counter2’
$ cat hist10.c
#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

#define SIZE2 (UCHAR_MAX+1)

int
main (void)
{
    int c;
    long counter = 0;
    long counter2 = 0;
    long counter3 = 0;
    long a[SIZE2], b[SIZE2];
    long i, j, end, size;
    FILE *fp;
    char filename[] = "shoulder.wmv";
    unsigned char *p;
    struct stat st;

    fp = fopen (filename, "rb+");
    fseek (fp, 0L, SEEK_END);
    end = ftell (fp);
    fseek (fp, 0L, SEEK_SET);
    printf ("file_length is %ld\n", end);
    p = malloc (end);
    if (p == NULL)
      {
	printf ("malloc failed.\n");
	exit (EXIT_FAILURE);
      }
    for (i = 0; i < SIZE2; ++i)
      {
	b[i] = 0;
      }
    printf ("Main control\n");
    while (1){
	c = fgetc (fp);
         if (c == EOF) break;
	p[counter++] = c;
	++b[c];
      }
// a little output
    for (i = 245; i < SIZE2; ++i)
      {
	printf ("b[%ld] is %ld\n", i, b[i]);
	counter3 = counter3 + b[i];
      }
    printf ("counter3 reached %ld\n", counter3);

// stat

    stat (filename, &st);
    size = st.st_size;
    printf ("file_length is %ld\n", size);

    fclose (fp);
    return 0;
}

// cc -Wall -Wextra hist10.c -o hist

$ ./hist
file_length is 19573712
Main control
b[245] is 50064
b[246] is 38224
b[247] is 58741
b[248] is 92306
b[249] is 58773
b[250] is 65617
b[251] is 41401
b[252] is 97099
b[253] is 75547
b[254] is 113450
b[255] is 128194
counter3 reached 819416
file_length is 19573712
$
-- 
Uno

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

looking at binary files with C Uno <Uno@example.invalid> - 2011-06-12 00:06 -0600
  Re: looking at binary files with C Ian Collins <ian-news@hotmail.com> - 2011-06-12 18:41 +1200
    Re: looking at binary files with C Uno <Uno@example.invalid> - 2011-06-12 00:58 -0600
  Re: looking at binary files with C Barry Schwarz <schwarz45@yahoo.com> - 2011-06-12 00:05 -0700
    Re: looking at binary files with C Uno <Uno@example.invalid> - 2011-06-12 01:41 -0600
      Re: looking at binary files with C "Joachim Schmitz" <jojo.nospam@schmitz-digital.de> - 2011-06-12 11:44 +0200
      Re: looking at binary files with C Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2011-06-12 10:25 -0600
  Re: looking at binary files with C Ike Naar <ike@sverige.freeshell.org> - 2011-06-12 10:26 +0000
  Re: looking at binary files with C Eric Sosman <esosman@ieee-dot-org.invalid> - 2011-06-12 08:23 -0400
    Re: looking at binary files with C Hans Vlems <hvlems@freenet.de> - 2011-06-13 23:48 -0700
    Re: looking at binary files with C Tim Rentsch <txr@alumni.caltech.edu> - 2011-06-23 00:55 -0700
  Re: looking at binary files with C "BartC" <bc@freeuk.com> - 2011-06-12 14:26 +0100
  Re: looking at binary files with C Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2011-06-12 10:24 -0600
    Re: looking at binary files with C Uno <Uno@example.invalid> - 2011-06-12 14:47 -0600
      Re: looking at binary files with C "BartC" <bc@freeuk.com> - 2011-06-12 22:23 +0100
        Re: looking at binary files with C Keith Thompson <kst-u@mib.org> - 2011-06-12 14:29 -0700
          Re: looking at binary files with C Uno <Uno@example.invalid> - 2011-06-12 16:31 -0600
            Re: looking at binary files with C Keith Thompson <kst-u@mib.org> - 2011-06-12 16:14 -0700
              Re: looking at binary files with C Uno <Uno@example.invalid> - 2011-06-12 18:41 -0600
      Re: looking at binary files with C Eric Sosman <esosman@ieee-dot-org.invalid> - 2011-06-12 17:42 -0400
        Re: looking at binary files with C Uno <Uno@example.invalid> - 2011-06-12 17:01 -0600
          Re: looking at binary files with C Keith Thompson <kst-u@mib.org> - 2011-06-12 16:23 -0700
            Re: looking at binary files with C Uno <Uno@example.invalid> - 2011-06-12 17:24 -0600
              Re: looking at binary files with C Ian Collins <ian-news@hotmail.com> - 2011-06-13 11:28 +1200
                Re: looking at binary files with C Geoff <geoff@invalid.invalid> - 2011-06-12 16:52 -0700
              Re: looking at binary files with C Keith Thompson <kst-u@mib.org> - 2011-06-13 08:51 -0700
            Re: looking at binary files with C Seebs <usenet-nospam@seebs.net> - 2011-06-13 14:39 +0000
              Re: looking at binary files with C Uno <Uno@example.invalid> - 2011-06-13 20:01 -0600
                Re: looking at binary files with C Keith Thompson <kst-u@mib.org> - 2011-06-13 19:24 -0700
                Re: looking at binary files with C Seebs <usenet-nospam@seebs.net> - 2011-06-14 17:02 +0000
                Re: looking at binary files with C Uno <Uno@example.invalid> - 2011-06-16 01:32 -0600
          Re: looking at binary files with C Eric Sosman <esosman@ieee-dot-org.invalid> - 2011-06-13 07:57 -0400
            Re: looking at binary files with C Uno <Uno@example.invalid> - 2011-06-13 20:23 -0600
              Re: looking at binary files with C Eric Sosman <esosman@ieee-dot-org.invalid> - 2011-06-13 23:12 -0400
                Re: looking at binary files with C lovecreatesbeauty <lovecreatesbeauty@gmail.com> - 2011-06-14 01:09 -0700
          Re: looking at binary files with C Oliver Jackson <chexmofo@hotmail.com> - 2011-06-15 20:15 -0700
      Re: looking at binary files with C Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2011-06-12 18:41 -0600
      Re: looking at binary files with C James Waldby <not@valid.invalid> - 2011-06-13 01:16 +0000
        Re: looking at binary files with C Uno <Uno@example.invalid> - 2011-06-12 19:48 -0600
        Re: looking at binary files with C "io_x" <a@b.c.invalid> - 2011-06-14 12:19 +0200
          Re: looking at binary files with C lovecreatesbeauty <lovecreatesbeauty@gmail.com> - 2011-06-14 03:58 -0700
            Re: looking at binary files with C "io_x" <a@b.c.invalid> - 2011-06-14 19:07 +0200
              Re: looking at binary files with C "io_x" <a@b.c.invalid> - 2011-06-14 19:46 +0200
              Re: looking at binary files with C Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2011-06-14 16:08 -0600
          Re: looking at binary files with C Ian Collins <ian-news@hotmail.com> - 2011-06-15 08:47 +1200
      Re: looking at binary files with C Hans Vlems <hvlems@freenet.de> - 2011-06-13 23:51 -0700
  Re: looking at binary files with C Michael Press <rubrum@pacbell.net> - 2011-06-15 13:06 -0700
    Re: looking at binary files with C Uno <Uno@example.invalid> - 2011-06-16 01:38 -0600
      Re: looking at binary files with C Michael Press <rubrum@pacbell.net> - 2011-06-16 00:54 -0700
        Re: looking at binary files with C James Waldby <not@valid.invalid> - 2011-06-16 16:59 +0000
      Re: looking at binary files with C "J. J. Farrell" <jjf@bcs.org.uk> - 2011-06-16 18:32 +0100

csiph-web