ファイルを新規生成するには?

[上に] [前に] [次に]
ぼくぴ [E-Mail] [HomePage] 1999/12/20(月) 04:19:18
こんにちは。
CGIでファイルを新規生成するには
sysopen(DB, $newfile, O_CREAT);
とするだけではだめなのでしょうか?

エラーメッセージを確認すると
「そのようなファイル又はディレクトリは無い」
と言った旨のことを返されます。

サーバはcgi.din.or.jpとwww.freeweb.ne.jpで
実行しました。

ご教授お願いします。

ラウォッチ 1999/12/20(月) 09:09:38
sysopen(DB, $newfile, O_CREAT);

sysopen(DB, $newfile, O_RDWR | O_CREAT);
にしてみたら!

あと、$newfileの内容に問題ありませんよねぇ!

ぼくぴ [HomePage] 1999/12/20(月) 12:27:56
さっそくのお返事ありがとうございます^^。
でさっそく試してみたのですが・・改善出来ませんでした。

スクリプトのURLをWebページアドレスのところに入れておいたので
お手数ですが今一度改善の手立てを教えて頂きたいです。

ご覧になれば分かると思いますが、.txtがソースファイルです。

andi 1999/12/20(月) 12:35:15
自分sysopen使った事ないので良く分かってないかもしれませんが、
ディレクトリのパーミッションは大丈夫なのですか?

B-Cus 1999/12/20(月) 13:14:18
普通に open で作ればいいと思うんだけど…。

それはそれとして、O_CREAT/O_RDWR などのシンボルは定義されて
いないので、指定しても無意味です (0として評価される)。
# などということは青ラクダ本に書いてあります。

というわけで、
 use Fcntl;
 sysopen(DB, $file_main, O_CREAT | O_RDWR)
ですな。

ついでに言っておくと、die print は die だけで OK。

ぼくぴ 1999/12/20(月) 17:31:38
[[解決]]
B-cusさんのおっしゃっられた
use Fcntl;
で解決しました^^。
最初use Fcnt1;と勘違いしてエラー発生したため、
以降まったく見当違いな方向を模索してたのですが
おかげで無駄な徒労を避けられました。

解決ついでにお聞きしたいのですが、
openでもこのようなファイルの新規作成は出来るのでしょうか・・?
うちの参考にしている本(CGI&PERLポケットリファレンス:技術評論社)
ではsysopenの方にしかO_CREATなどが明記されていなかったもので^^;。

1日も経たないうちにたくさんのご解答をみなさんありがとうございました。

ジェインウェイ大佐 1999/12/20(月) 22:59:04
open(MAKE,">$file");
close(MAKE);

で空のファイルを作成できます。
でもそのままだとCGIのユーザ所有のファイルになってFTPで消せないから、

chmod(0666,"$file");

をその後に付け加えるといいかもね。

ぼくぴ 1999/12/21(火) 23:17:50
ありがとうございます。
普通にopenで新規作成出来て
パーミッションも後で変更出来るんですね。

勉強になりました^^。

[上に] [前に] [次に]