C/400

11. IFSファイルの書き込み

次に IFSファイルへの書き込み更新の例を紹介する。
IFSストリーム・ファイルへの書き込み更新は DB2/400のようにレコード単位ではないので
ファイル全体への書き込みとなる。
書き込みの前にはその出力ファイルが存在していなくてはならないのでここでは
存在していなければ、作成してから書き込むという汎用的な手法を紹介することにする。

0001.00 #include <stdio.h>
0002.00 #include <stdlib.h>
0003.00 #include <string.h>
0004.00 #include <fcntl.h>
0005.00                                                                 
0006.00 #define TRUE         0                                          
0007.00 #define FALSE       -1                                          
0008.00                                                                 
0009.00 void main(void){                                                
0010.00    char dir[] = "/QATMHSTOUT/HOME.HTM";                         
0011.00    int fildes = FALSE;                                          
0012.00    char buff[256];                                              
0013.00    long len;                                                    
0014.00                                                                 
0015.00    memset(buff, 0, sizeof(buff));                               
0016.00    strcpy(buff, "MY TEST DATA");                                
0017.00    len = strlen(buff);                                          
0018.00    if((fildes = open(dir, O_WRONLY | O_CREAT | O_TRUNC))== -1){ 
0019.00       printf("%s  を作成できません。 \n", dir);                 
0020.00       getchar(); return;                                        
0021.00    }                         
0022.00     write(fildes, buff, len);
0023.00     close(fildes);           
0024.00     getchar();               
0025.00 }

まず

fildes = open(dir, O_WRONLY | O_CREAT | O_TRUNC)

の O_CREAT によってファイルが存在していない場合でも作成される。
注意したいのは O_TRUNC が指示されていない例が多いが実用レベルでは必ず忘れずに指定しておくこと。
詳細は API解説書を参照されたし。