C/400

70. オプション指定でファイルを作成する方法

IFS 上へのファイル作成では open 関数で存在していなければ、ファイルを
作成し、存在していれば上書きで作成することができる。

【 例.1 】
#include <fcntl.h>
#include <errno.h>
     :
int fildes = FALSE;

fildes = open(file, O_WRONLY | O_CREAT | O_TRUNC)) == -1){
  printf("[ERROR] CANNOT OPEN FILE = %s:%s\n", file, strerror(errno));
}

というような感じである。

(1) 権限の設定

このファイルを作成した後で、このファイルの権限を設定したい場合がある。
CHGAUT コマンドを使って system 関数で設定してもよいが
2 度手間を無くす意味でも open 関数で open で作成するとと同時に
権限まで指定しておくことができる。

if((fildes = open(file, O_WRONLY | O_CREAT | O_TRUNC,             
            S_IRWXO | S_IRWXU)) == FALSE){ /* *PUBLIC=RWX */
              :

のように次の任意指定のパラメータとして S_IRWXOS_IRWXU
追加してやればよいのである。
S_IRWXO*PUBLIC *ALL を意味するし
S_IRWXU は、このユーザーでの *RWX (書き込み、読み取りとも可 )の権限を
与えてくれる。

(2) CCSID の設定

Unicode を利用することが多くなってきた最近では CCSID も同時に
設定しておく必要がある。
open 関数で O_CCSID を指定すると、追加バラメータで CCSID を指定することが
できる。

if((fildes = open(file, O_WRONLY | O_CREAT | O_TRUNC | O_CCSID ,             
            S_IRWXO | S_IRWXU, 1208 )) == FALSE){ /* *PUBLIC=RWX */
              :
【 解説 】

この例では O_CCSID によって CCSID の指定があることを open 関数に宣言するとともに
CCSID 1208 ( = UTF-8 ) を指定している。