ERROR: Too many open raster files

J H Mintz ubac1eb at cs.bbk.ac.uk
Thu Aug 27 14:49:03 EDT 1992


Here is an extract from the code which is causing the error:

ERROR: Too many open raster files

 
      sprintf(chardist,"%i",hold_distance[i]);
      strcpy(tempchar,strcat(tempchar,chardist));
      sprintf(systemstring,"%s%s%s%s%s%s%s","r.buffer input=",route," output=",r
oute,"_BUFF distances=",tempchar," units=meters");
      printf("%s\n",systemstring);
      system(systemstring);
      system("sleep 3");

      sprintf(systemstring,"%s%s%s%s%s%s%s%s%s","r.cross input=\"",map_to_use,",
",route,"_BUFF\", output=",map_to_use,"_",route,"_CR");
      system(systemstring);


     if ((fd = G_open_cell_old(map_to_use,mapset)) < 0)
        G_fatal_error("Could not open raster map ");

  
      if ((buff_fd = G_open_cell_old(map_buff,mapset)) < 0)
        G_fatal_error("Could not open raster buffer map ");

      if ((new_map_fd = G_open_cell_new(new_map)) < 0)
        G_fatal_error("Could not create overlay map");
      
      for(row = 0; row < nrows;row++)
        {
          G_zero_cell_buf(buf);
          G_zero_cell_buf(buff_buf);
          G_zero_cell_buf(new_map_buf);
          G_get_map_row(fd,buf,row);
          G_get_map_row(buff_fd,buff_buf,row);


          for (col = 0;col < ncols;col++)
            {
              tmp = hold_impact[buff_buf[col]] * hold_catrank[buf[col]];
              if (tmp == 0)
                new_map_buf[col] = MAX_NO_IMPACT/2;
--More--              if (tmp < 0)
                new_map_buf[col] = (MAX_NO_IMPACT - (tmp/MAX_NO_IMPACT))/2;
              if (tmp > 0)
                new_map_buf[col] = ((tmp/MAX_NO_IMPACT) - MAX_NO_IMPACT)/2;

            }

          G_put_map_row(new_map_fd,new_map_buf);
        }
          
      G_close_cell(fd);
      G_close_cell(buff_fd);
      G_close_cell(new_map_fd);

The program is taking a map and a route map, calling r.buuffer and r.cross
by a system call to produce a buffer map and then using 

G_open_cell_nap_old and G_open_cell_map_new on 2 and 1 files
respectively to prouduce a new map.As you can see i close all
3 files at the end.

After this, I then run another program ( same executabele), which
draws these four maps : base map, route map, buffer map, my own calculated
map.This is a modification of slide.show.sh as follows:
for i in $MAPLIST
do
                
        atnum=`expr $atnum % $totmaps`
        at_vert=`expr $atnum % $DOWN`
        at_hori=`expr $atnum / $DOWN`

        d.frame -s lab.$at_hori.$at_vert
        echo $i in $MAPSET | d.text size=80

        d.frame -s map.$at_hori.$at_vert
        d.erase
        d.rast $i
        atnum=`expr $atnum + 1`
                
done

now, an error occurs on two occasions.Sometimes, the r.buffer command
fails with ERROR: Too many raster files open and sometimes one of the
d.rast commands fails with the same error.When I then exit GRASS and delete
some of my calculated raster files, re-enter and re-run the problem disappears until those files hacve been re-created.

The system I am using is GRASS 4.0 on an RS6000/320 running AIX.
The file descriptor limit seems to be about 2000 - 
I ascertained this by running a test C program whcih
fopens files until it falls over,

Any help would be much appreciated.


Joe Mintz, Dept Computer Science, Birkbeck Colleege.



More information about the grass-dev mailing list