🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: be.comp.programming
9 messages
9 total messages Started by karel adams Sun, 29 Jun 2003 09:49
beginnersprobleem C onder Linux
#4888
Author: karel adams
Date: Sun, 29 Jun 2003 09:49
42 lines
2351 bytes
dag allemaal,

mijn eerste nederige pogingen tot C-programmatie leiden al snel tot
frustratie.
mijn prog moet de eerste 128 bytes uit een bestand in een buffer lezen,
en mijn code ziet er zo uit:

#include <stdio.h>
main ()
{
int  fp_bgl            ; /* file pointer to file being read   */
int rd_cnt            ; /* will tell how many bytes were actually read
*/
char header[128]       ; /* first 128 bytes in header */
FILE *fopen(), *infile ; /* the file being read */

fp_bgl=fopen("de_naam_van_mijn_bestand", "r" );
printf ("file opened with FP_BGL= %3.0d\n", fp_bgl);
rd_cnt=read(fp_bgl, header, 128);
printf ("Header was read with %3.0d bytes\n", rd_cnt);

}

Als ik dit compileer (gcc mijn_prog.c) krijg ik een verwittiging
Warning: assignment makes integer from pointer without a cast
op de lijn van de fopen, ik heb dus blijkbaar fp_bgl als verkeerd type
gedeclareerd
Heb al wat andere type gezet (char, long...) maar niks helpt.
Bij uitvoering geeft hij altijd -1 bytes gelezen dus de read lukt
effectief niet.
Wat doe ik mis? Hoe verbeter ik dit?

Omgeving = gcc egcs 2.91.66 op Suse Linux 6.3

Sorry als dit een stomme vraag is, ik heb met Google gezocht
en gemerkt dat ik allesbehalve de eerste ben die dit voorheeft
maar een duidelijk antwoord heb ik zo gauw niet gevonden....
De fopen schijnt wel te werken want als ik een niet-aanwezig
bestand invul dan begint hij van stdin te lezen...

Dank bij voorbaat!
Karel
Re: beginnersprobleem C onder Linux
#4889
Author: KLinZ
Date: Sun, 29 Jun 2003 10:19
29 lines
2064 bytes
karel adams wrote:

> #include <stdio.h>
> main ()
> {
> int  fp_bgl            ; /* file pointer to file being read   */

>
> Als ik dit compileer (gcc mijn_prog.c) krijg ik een verwittiging
> Warning: assignment makes integer from pointer without a cast
> op de lijn van de fopen, ik heb dus blijkbaar fp_bgl als verkeerd type
> gedeclareerd
> Heb al wat andere type gezet (char, long...) maar niks helpt.
> Bij uitvoering geeft hij altijd -1 bytes gelezen dus de read lukt
> effectief niet.
> Wat doe ik mis? Hoe verbeter ik dit?

fp_bgl moet van het type FILE * zijn. Dus:

FILE *fp_bgl;

Voor de rest moet je de declaratie van fopen() weghalen. Deze is immers al
in stdio.h gedeclareerd (en ook nog eens op een andere wijze ook). Gebruik
ook fread() i.p.v. read(). Je gebruikt namelijk stream en file functies door
elkaar. En later netjes de file sluiten met fclose().


-- 
www.zenobits.com
Re: beginnersprobleem C onder Linux
#4891
Author: KLinZ
Date: Sun, 29 Jun 2003 10:39
31 lines
2090 bytes
KLinZ wrote:

Even een volledige recode:

#include <stdio.h>

int main () {
 FILE *fp_bgl;      /* file pointer to file being read   */
 int rd_cnt;        /* will tell how many *items* were actually read */
 char header[128];  /* first 128 bytes in header */

 fp_bgl=fopen("de_naam_van_mijn_bestand", "r");
 if(fp_bgl!=NULL) {
  printf ("file opened with FP_BGL= %p\n", fp_bgl);     /* op zich weinig
nuttige info */
  rd_cnt=fread(header, sizeof(header), 1, fp_bgl);
  printf ("Header has read %3d items\n", rd_cnt);
  fclose(fp_bgl);
 } else {
  printf ("bestand kon niet geopend worden\n");
 }

 return 0;
}

Merk op dat fread niet het aantal gelezen bytes teruggeeft, maar het aantal
succesvol gelezen 'items'. Je kunt die waarde dus gebruiken om te
controleren of het lezen gelukt is.

-- 
www.zenobits.com
Re: beginnersprobleem C onder Linux
#4892
Author: Philip Paeps
Date: Sun, 29 Jun 2003 11:40
17 lines
1493 bytes
KLinZ <klinz@nospamzenobitsspamno.com> wrote:
> KLinZ wrote:
> Even een volledige recode:

Bijna volledig mee eens ... maar:

>  char header[128];  /* first 128 bytes in header */

Ik zou die buffer 128+1 maken.

 - Philip

-- 
Philip Paeps

  BOFH Excuse #350:
    paradigm shift...without a clutch
Re: beginnersprobleem C onder Linux
#4893
Author: KLinZ
Date: Sun, 29 Jun 2003 12:15
12 lines
1566 bytes
Philip Paeps wrote:
>>
>>  char header[128];  /* first 128 bytes in header */
>
> Ik zou die buffer 128+1 maken.
>

Waarom? Hij wil toch maar 128 bytes inlezen? Hij heeft het nergens over een
zero terminated string ofzo.

-- 
www.zenobits.com
Re: beginnersprobleem C onder Linux
#4894
Author: karel adams
Date: Sun, 29 Jun 2003 12:22
32 lines
1857 bytes
"KLinZ" <klinz@NOSPAMzenobitsSPAMNO.com> schreef in bericht
news:hKALa.14197$KF1.277566@amstwist00...
> Philip Paeps wrote:
> >>
> >>  char header[128];  /* first 128 bytes in header */
> >
> > Ik zou die buffer 128+1 maken.
> >
>
> Waarom? Hij wil toch maar 128 bytes inlezen? Hij heeft het nergens
over een
> zero terminated string ofzo.

ja kvroeg me dat ook al af
klinz heeft me goed begrepen: het is binaire data
die ik te lezen heb, g��n zero-terminated string
terwijl we het erover hebben:
als ik ze eenmaal ingelezen krijg,
spreek ik de array dan aan van 1 tot 128 of van 0 tot 127?

zonnige groetjes,
ka (trekt nu ter bbq)





>
> -- 
> www.zenobits.com
>
Re: beginnersprobleem C onder Linux
#4895
Author: Jo Vermeulen
Date: Sun, 29 Jun 2003 12:37
36 lines
2213 bytes
karel adams wrote:

> 
> "KLinZ" <klinz@NOSPAMzenobitsSPAMNO.com> schreef in bericht
> news:hKALa.14197$KF1.277566@amstwist00...
>> Philip Paeps wrote:
>> >>
>> >>  char header[128];  /* first 128 bytes in header */
>> >
>> > Ik zou die buffer 128+1 maken.
>> >
>>
>> Waarom? Hij wil toch maar 128 bytes inlezen? Hij heeft het nergens
> over een
>> zero terminated string ofzo.
> 
> ja kvroeg me dat ook al af
> klinz heeft me goed begrepen: het is binaire data
> die ik te lezen heb, g��n zero-terminated string
> terwijl we het erover hebben:
> als ik ze eenmaal ingelezen krijg,
> spreek ik de array dan aan van 1 tot 128 of van 0 tot 127?

In C lopen array-indices altijd van 0 tot n-1 met n de lengte van de array.

Dus van 0 tot 127 ja.

[snip]

Mvg,

-- 
Jo Vermeulen
Student Computer Science at the tUL
email: jo@lumumba.luc.ac.be
www: http://lumumba.luc.ac.be/jo
Re: beginnersprobleem C onder Linux
#4896
Author: Philip Paeps
Date: Sun, 29 Jun 2003 12:56
20 lines
1995 bytes
KLinZ <klinz@nospamzenobitsspamno.com> wrote:
> Philip Paeps wrote:
> > >  char header[128];  /* first 128 bytes in header */
> >
> > Ik zou die buffer 128+1 maken.
> 
> Waarom? Hij wil toch maar 128 bytes inlezen? Hij heeft het nergens over een
> zero terminated string ofzo.

Rare gewoonte van mij.  Ik voorzie altijd de mogelijkheid om er een \0 achter
te hangen, 'just in case'.  Zelfs als het geen string is, komt die \0 soms
nogal van pas als ik bizarre dingen met die data wil uitvreten.

 - Philip [of is het een slechte gewoonte? ;-)]

-- 
Philip Paeps

  BOFH Excuse #131:
    telnet: Unable to connect to remote host: Connection refused
Re: beginnersprobleem C onder Linux
#4897
Author: KLinZ
Date: Sun, 29 Jun 2003 13:12
21 lines
2074 bytes
Philip Paeps wrote:
> KLinZ <klinz@nospamzenobitsspamno.com> wrote:
>> Philip Paeps wrote:
>>>>  char header[128];  /* first 128 bytes in header */
>>> 
>>> Ik zou die buffer 128+1 maken.
>> 
>> Waarom? Hij wil toch maar 128 bytes inlezen? Hij heeft het nergens
>> over een zero terminated string ofzo.
> 
> Rare gewoonte van mij.  Ik voorzie altijd de mogelijkheid om er een
> \0 achter te hangen, 'just in case'.  Zelfs als het geen string is,
> komt die \0 soms nogal van pas als ik bizarre dingen met die data wil
> uitvreten. 
> 
>  - Philip [of is het een slechte gewoonte? ;-)]

Ja. Maar jij hebt wel meer rare gewoontes, dus ik vergeef het je.

-- 
www.zenobits.com
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads