IFS 上へのファイル作成では open 関数で存在していなければ、ファイルを
作成し、存在していれば上書きで作成することができる。
#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));
}
というような感じである。
このファイルを作成した後で、このファイルの権限を設定したい場合がある。
CHGAUT コマンドを使って system 関数で設定してもよいが
2 度手間を無くす意味でも open 関数で open で作成するとと同時に
権限まで指定しておくことができる。
if((fildes = open(file, O_WRONLY | O_CREAT | O_TRUNC,
S_IRWXO | S_IRWXU)) == FALSE){ /* *PUBLIC=RWX */
:
のように次の任意指定のパラメータとして S_IRWXO と S_IRWXU を
追加してやればよいのである。
S_IRWXO は *PUBLIC *ALL を意味するし
S_IRWXU は、このユーザーでの *RWX (書き込み、読み取りとも可 )の権限を
与えてくれる。
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 ) を指定している。