アプリケーション開発ポータルサイト
ServerNote.NET
カテゴリー【ApacheC/C++
CGIプログラムで操作した/tmp内ファイルが見つからない場合
POSTED BY
2023-11-30

コンソールから/tmp内にファイルを作ったり削除したりはできるが、CGI経由で実行すると/tmpにファイルが居ない
これはどうやら、Apacheなど、systemdサービス経由で立ち上げたデーモンには、専用の/tmpが用意されるらしい。
つまり、C言語で書いてコンパイルしたバイナリCGIが以下のようにファイル操作をしたとして、

fp = fopen("/tmp/test.log", "wb");
if(fp) {
 printf("fp ok errno=%d", errno);
}
else {
 printf("fp ng errno=%d", errno);
}

コンソール上で実行すると/tmpにtest.logがちゃんとあるが、CGIとしてブラウザで実行しても/tmpにはtest.logはない。
しかしちゃんとfpポインタは返っており、errnoは0である。

どこにあるのか?当方Ubuntuで探してみたところ、Apacheサービス専用の/tmpは、

/tmp/systemd-private-e67a6882150e43a992a91ec7c8a7597e-apache2.service-N5Pg9V/tmp

であった!このディレクトリでlsしたら、ちゃんとtest.logがあった。

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

【キーワード検索】