source: trunk/WRF.COMMON/WRFV2/external/io_grib_share/open_file.c

Last change on this file was 11, checked in by aslmd, 14 years ago

spiga@svn-planeto:ajoute le modele meso-echelle martien

File size: 2.0 KB
Line 
1#include <stdio.h>
2#include <stdlib.h>
3#include <fcntl.h>
4
5#ifndef CRAY
6# ifdef NOUNDERSCORE
7#      define OPEN_FILE open_file
8#      define CLOSE_FILE close_file
9#      define WRITE_FILE write_file
10#      define WRITE_FILE_N write_file_n
11#      define FLUSH_FILE flush_file
12# else
13#   ifdef F2CSTYLE
14#      define OPEN_FILE open_file__
15#      define CLOSE_FILE close_file__
16#      define WRITE_FILE write_file__
17#      define WRITE_FILE_N write_file_n__
18#      define FLUSH_FILE flush_file__
19#   else
20#      define OPEN_FILE open_file_
21#      define CLOSE_FILE close_file_
22#      define WRITE_FILE write_file_
23#      define WRITE_FILE_N write_file_n_
24#      define FLUSH_FILE flush_file_
25#   endif
26# endif
27#endif
28
29/*
30 * Fortran-callable function to open/close files
31 */
32int OPEN_FILE (char *filename, char *permissions, int *outfd, int *ierr, 
33               int strlen1, int strlen2)
34{
35  char filename2[1000];
36  char permstring[1000];
37  int permvals;
38
39  strncpy(filename2,filename,strlen1);
40  filename2[strlen1]='\0';
41
42  strncpy(permstring,permissions,strlen2);
43  permstring[strlen2]='\0';
44
45  if (strcmp(permstring,"w") == 0) {
46    permvals = O_CREAT|O_WRONLY|O_TRUNC;
47  } else {
48    permvals = O_RDONLY;
49  }
50
51  *outfd = open(filename2,permvals,0644);
52  if (*outfd == -1) 
53    {
54      fprintf(stderr,"setting ierr to -1, filename: %s\n",filename);
55      perror("");
56      *ierr = -1;
57      return -1;
58    }
59  else
60    {
61      *ierr = 0;
62      return 0;
63    }
64}
65
66int WRITE_FILE(int *fd, char *buf, int *ierr, int strlen)
67{
68  int nbytes;
69
70  nbytes = write(*fd,buf,strlen);
71  if (nbytes != strlen)
72    {
73      *ierr = -1;
74    }
75  else
76    {
77      *ierr = 0;
78    }
79  return *ierr;
80}
81
82int WRITE_FILE_N(int *fd, char *buf, int *nbytes, int *ierr)
83{
84  int bytes_written;
85
86  bytes_written = write(*fd,buf,*nbytes);
87  if (bytes_written != *nbytes)
88    {
89      *ierr = -1;
90    }
91  else
92    {
93      *ierr = 0;
94    }
95  return *ierr;
96}
97
98int CLOSE_FILE (int *fd)
99{
100  close(*fd);
101  return 0;
102}
103
104int FLUSH_FILE (int *fd)
105{
106  fsync(*fd);
107  return 0;
108}
109
Note: See TracBrowser for help on using the repository browser.