-2

私はANSICcgi-binサーバープログラムを書いています。プログラムの各インスタンスは、同じファイルに同時にアクセスできます。私は次のようにします:

handle = fopen(name,type);
fd = fileno(handle);
MyLockFile(fd)  //I use fcntl
.....

問題は、「open」ではなく「fopen」でファイルを開くことです。「ロック」はそのように機能しますか?「ハンドル」ではなく「fd」をロックできます。

その理由は、実行可能な「fd =open...」コードを記述できないためです。以下の私のコードは実行可能ファイルを作成しますが、書き込み権限が設定されていません。どうしてか分かりません

fd = open(name,O_CREAT|O_WRONLY|S_IREAD|S_IWRITE|S_IRGRP|
     S_IWGRP|S_IROTH|S_IWOTH);
write(fd,data,strlen(data));
close(fd);

このファイルに書き込むことも追加することもできません。

4

1 に答える 1

0

open()関数が間違っています。O_CREATを指定する場合、許可ビットは3.引数である必要があります。

 open(name,O_CREAT|O_WRONLY, 
      S_IREAD|S_IWRITE|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
于 2013-02-12T13:37:32.183 に答える