Salome HOME
NRI : KERNEL is now defined in KERNELCatalog.
[modules/kernel.git] / src / HDFPersist / test9.cxx
1 using namespace std;
2 #include <iostream.h>
3 #include "HDFOI.hxx"
4 #include <stdlib.h>
5
6
7 int main()
8 {
9   HDFfile      *hdf_file;
10   HDFgroup     *hdf_group;
11   HDFdataset   *hdf_dataset1;
12   int          fd;
13   size_t       size;
14   char *       buffer;
15   off_t        pos;
16
17   system("rm ascii_hdf.txt");
18
19   try  {
20    
21     // a new HDFfile object
22     hdf_file = new HDFfile("file_ascii.hdf");
23     MESSAGE( ">> A HDFfile object is created" );
24       
25     hdf_file->OpenOnDisk(HDF_RDONLY);
26     MESSAGE( ">> The HDF file is opened on Disk with HDF_RDONLY access mode" )
27   
28     hdf_group = new HDFgroup("ASCII GROUP",hdf_file); 
29     MESSAGE(">> A new HDF group object ASCII GROUP" << " is created in memory")
30
31     hdf_group->OpenOnDisk();
32     MESSAGE( ">> The group ASCII GROUP is opened on disk" );
33       
34     // The dataset object 'ASCII DATASET'
35     hdf_dataset1 = new HDFdataset("ASCII DATASET",hdf_group);
36     MESSAGE( ">> The dataset object 'ASCII DATASET' is created in memory " );
37
38     hdf_dataset1->OpenOnDisk();
39     MESSAGE( ">> The dataset object 'ASCII DATASET' is opened on disk " );
40       
41     size = (size_t) hdf_dataset1->GetSize();
42  
43     // Open the target file
44       
45     if ( (fd = open("ascii_hdf.txt",O_RDWR|O_CREAT,00666)) <0) { 
46       perror("open : test9");
47       return -1;
48     };
49
50   //    if ( (pos = lseek(fd,(off_t) size-3,SEEK_SET)) <0) {
51 //        perror("lseek : test9");
52 //        return -1;
53 //      };
54
55 //      if ( write(fd,"END",3) <0) { 
56 //        perror("write : test9");
57 //        return -1;
58 //      };
59
60 #ifdef _POSIX_MAPPED_FILES
61     // Map le fichier en mémoire
62     //   if ((buffer = (char *)  mmap(0,size,PROT_WRITE,MAP_SHARED,fd,0)) == MAP_FAILED ) {
63     // perror("mmap : test9");
64     //return -1;
65     //};
66     buffer = new char[size];
67 #else
68     // Sort de la compilation
69 #error Necessite l''utilisation de la primitive mmap      
70 #endif
71       
72     // Transfert les informations dans le fichier destination
73     hdf_dataset1->ReadFromDisk(buffer);
74
75     if ( write(fd,buffer,size) <0) { 
76       perror("write : test9");
77       return -1;
78     };
79           
80     // Desalloue le mapping
81 //      if (munmap(buffer,size) < 0 ) {
82 //        perror("munmap : test9");
83 //        return -1;
84 //      };
85       
86     // Close the target file
87     if (close(fd) <0) {
88       perror("close : test9");
89       return -1;
90     }
91       
92     hdf_dataset1->CloseOnDisk();
93     MESSAGE( ">> The dataset is closed on disk " );
94  
95     hdf_group->CloseOnDisk();
96     MESSAGE( ">> The group is closed on file" );
97       
98     hdf_file->CloseOnDisk();
99     MESSAGE( ">> The HDF file is closed on Disk" )
100         
101     // Memory clean
102     delete hdf_dataset1;
103     delete hdf_group;
104     delete hdf_file;
105     delete buffer;
106     MESSAGE( ">> MEMORY CLEAN : all HDF objects have been deleted" );
107  
108   }
109   catch (HDFexception) {
110     return -1;
111     MESSAGE( "!!! HDFexception !!! " )
112   }  
113   
114   return 0;
115 }
116