- 締切済み
FILEポインタ配列の動的生成
タイトルどおりFILEポインタ配列を動的に生成しようとして方法に困っています。 Cでmallocを使って生成しようとしています。 ご存知の方、宜しくお願いします。。。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- t_nojiri
- ベストアンサー率28% (595/2071)
>・元質問者さんが失礼ながら素人丸出しの質問をしていることは読み取れませんか? 上記、頭の隅に有るなら質問されてる方を馬鹿にしてる事になりませんか? >・単にファイルを開きっ放しと言う意味と仮定して、 それが何故危険と言い切るのでしょうか。 最初に書いた通り、エラー発生時に中途半端な途中までしか出力されないファイルが残ったり、読み込みで開いてても、ファイル破壊する可能性が有るからです。 >それを理解してらっしゃらないようだから、敢えて回答しなくても宜しいのでは? としました。 いや、ファイルポインタ動的に生成しなくてはならないプログラムは、最初のコンセプトから不必要な処理が無いか?確認の意味で補足要求したまでです。
- charmer29-2
- ベストアンサー率25% (41/159)
No.3です。 元質問者さんには恐縮ですが、聞かれているので回答しておきます。 *No.4について ・「排他もしくは共有制御」なんて元質問者が書いてますか? ・「ファイルポインタ開けっ放し」とはどういう意味? ・単にファイルを開きっ放しと言う意味と仮定して、 それが何故危険と言い切るのでしょうか。 ちょっとしたプログラムで、ファイルを複数開くことは極当たり前に行われていることです。 例えばUnixに標準のdiff3コマンドは同時にファイルを少なくとも三つ開きますし標準入出力なども開きっ放しです。 ・「プログラムの生成期間と同期」なんてことも元質問者さんは書いていませんね。 ・「DBのコアシステム」なんてことは誰も話題にしてませんね。 ・元質問者さんが失礼ながら素人丸出しの質問をしていることは読み取れませんか? ・読み取れたのなら、相手に合わせるべきです。 それを理解してらっしゃらないようだから、敢えて回答しなくても宜しいのでは? としました。 *No.5について マルチタスクでファイルを複数開くのは安全だとしていますよね。 それとも、配列を使わないから安全だと言いたいのでしょうか。 全体的に、ご自身の経験に照らし合わせて大仰に捉えているなんてことはありませんか? 誰もが大規模なプロジェクトに参加しているわけではないと思うのです。
- t_nojiri
- ベストアンサー率28% (595/2071)
>もしあるのであれば、その環境でマルチタスクにするだけで安全になるという根拠も知りたいものです。 もう一点、誤解を解きたいと思います。 マルチタスクで安全と言ってるのでは有りません。 マルチタスクでファイルポインタ開くんだったら、配列使ってファイルポインタ管理しないでしょ? と書いてます。よく読んでください。
- t_nojiri
- ベストアンサー率28% (595/2071)
>一つのプログラムで複数のファイルを開くのが危険な 環境があるのなら、逆に教えて欲しいところです。 動的に複数個配列で管理しなくてはならない、同時にファイルをOPENし、排他もしくは共有制御するのが、普通ではないので理解出来ないのです。 FILEのI/Oというのは、なるべく一気に行う物で、ファイルポインタ開けっ放しにしてプログラムの生成期間と同期させるものでは有りません。 DBのコアシステムですら、OPENするファイルは限られてますが。 想定出来ないから、説明を求めてるのにそれすら封じるcharmer29-2氏の意図が理解出来ません。
- charmer29-2
- ベストアンサー率25% (41/159)
No.2のnojiriさんに限ったことではありませんが、 ご自分が理解できていないことは回答しない方が 宜しいかと思われますが。 一つのプログラムで複数のファイルを開くのが危険な 環境があるのなら、逆に教えて欲しいところです。 もしあるのであれば、その環境でマルチタスクにするだけで 安全になるという根拠も知りたいものです。 尚、元質問に関してはNo.1さんの回答で充分と思われるので割愛。
- t_nojiri
- ベストアンサー率28% (595/2071)
もう少し、説明が欲しいです。 その前に、1つのプログラムで同時に複数のファイル開くのは危険ですから(エラー発生したら中途半端なファイルが沢山出来るので)ファイルポインタを配列で複数用意する必要性が特に考えられません。 子プロセス作るとか、マルチスレッド化してるなら、ファイルのポインタ配列管理なんてしない筈ですし。
- rabbit_cat
- ベストアンサー率40% (829/2062)
何をやりたいのかかがいまいちよくわかりませんが, FILE** pfiles; pfiles = (FILE**)malloc(sizeof(FILE*)*N); てことかな.