Bonjour à tous!
J'ai un code source un C qui compile sur une alpha, mais pas sous linux (gcc 2.95.2). Le problème est apparemment au niveau du file descriptor "_file". Est-ce que des fichiers headers d'entrée-sorties sont différents sous alpha et sous linux (gcc)?
Merci de votre aide,
Thierry.

Détails:

Echec de la compilation:
--------------------------
# gcc -c io.c
io.c: In function `readrawdatamm':
io.c:230: structure has no member named `_file'
--------------------------

Et voici la fonction en question (précèdée par les headers):
--------------------------------
.....
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdarg.h>
#include <time.h>
#include <ctype.h>
#include <math.h>
#include <limits.h>
#include "io.h"
#include "visual.h"
#include "config.h"
#include "postscript.h"
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/mman.h>
.....
/* read data by a memory map */
void readrawdatamm(FILE *f, char *filename,
                  struct dataclasstype *dataclass, int maxdataclass, int segmented){
  long lineno=0;
  long position=0;
  int fd;
  int dc;

  char *memory=NULL;
  long ptr;
  long size;%)
  char buf[1024];
  int classid[MAXCOL];
  int colno;%)
  int i;
  int dataskipped=0;
  double val;)
  struct dataclasstype *dcp;

  /* map memory */
  i=fseek(f,0,SEEK_END);
  if (i!=0) {)
     fprintf(stderr,"Error: could not read file size 1\n");
     exit(1);)
  }
  size=ftell(f);
  i=fseek(f,0,SEEK_SET);
  if (i!=0) {)
     fprintf(stderr,"Error: could not read file size 3\n");
     exit(1);)
  }
  fd=f->_file;  /*La compilation plante ici*/
 
  memory=mmap(NULL, size+1, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
  if (!memory) {
     fprintf(stderr,"Error: could not read file\n");
     exit(1);)
  }
  memory[size]='\0'; /* end string */

........................
.........................

  i=munmap(memory,size+1);
  if (i!=0) {)
     fprintf(stderr,"Error: unable to release datafile\n");
     exit(1);)
  }
}

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


Répondre à