Linux で実行する関数を作成し、データの処理中に Linux でいくつかのファイルを生成しました。その関数を rtems (リアルタイム OS) で呼び出したところ、正常にコンパイルされ、ほとんど問題なく動作しているようです。しかし、指定したディレクトリに結果ファイル (オプション) を作成できないことがわかりました。(ファイルシステムにはSDカードを使用しています)。私は1年前に書いたテストプログラムを持っていて、SDカードでファイルの読み取り、書き込み、コピーをテストしましたが、すべて問題ありませんでした。しかし、SD カードのテスト プログラムを変更し、(深層学習に関連する) さらに多くのものを追加して作成したこの新しいアプリケーションでは、プログラムはファイルを作成できません。コードでは、「result」というディレクトリが存在するかどうかを確認し、存在しない場合はディレクトリを作成し、インデックスをループするファイルを生成します。誰かが問題を見つけてくれることを願っています。ヘッダーは、Linux と rtems の両方で問題ありません。(rtems には同じヘッダーがあります) ファイル システムは正常にマウントされており、mkdir は 0 を返します。rtems から (正常に実行されているテスト プログラムから) いくつかのヘッダーを追加しようとしましたが、機能しませんでした。何が問題なのですか?任意のヘルプや提案をいただければ幸いです。
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <sys/stat.h>
lrn_layer(,...)
{
...
if (save_output) {
if (stat("result", &st) == -1) {
printf("making directory 'result'..\n");
#ifdef _RTEMS_
rtems_status_code status = mkdir("result", 0777);
printf("mkdir status = %d\n", status);
#else
mkdir("result", 0777);
#endif
}
else {
printf("directory 'result' exists..\n");
}
sprintf(str, "./result/L%02d_ReLU_T000_FN%03d.txt", layer, ofm_idx);
file = fopen(str, "w");
printf("writing relu result to file %s ..\n", str);
for (rix = 0; rix < H; rix++) {
fprintf(file, "### kr = %d ##\n", rix);
for (cix = 0; cix < W; cix++) {
fprintf(file, "%f ",*(top+ofm_idx*H*W+rix*W+cix));
if (cix %8 == 7) fprintf(file, "\n");
}
}
fclose(file);
}
...
}
以下は処理結果の一部です:
---- Layer 1 : ReLU ----
reading inputs from files..
doing ReLu..
making OFM 0 / 96
making directory 'result'..
mkdir status = 0
writing relu result to file ./result/L01_ReLU_T000_FN000.txt ..
making OFM 1 / 96
stat = 0
directory 'result' exists..
writing relu result to file ./result/L01_ReLU_T000_FN001.txt ..
making OFM 2 / 96
stat = 0
directory 'result' exists..
writing relu result to file ./result/L01_ReLU_T000_FN002.txt ..