ERROR: Too many open raster files

Michael Shapiro shapiro at zorro.cecer.army.mil
Mon Aug 31 16:38:24 EDT 1992


One possibility is that you are misusing memory in your program
and inadvertently overwriting data structures in the gis library.
|
|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.
|
|



Michael



More information about the grass-dev mailing list