![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
8行目のfatalに制御が移行してしまいます。
何が原因でファイルを開けないのでしょうか。
fcntl.hはインクルードしています。
1 // この関数によって現在のプレイヤーのデータがファイルに書き込まれる。
2 // これは主にゲーム終了後にクレジット情報を更新するために用いられる。
3 void update_player_data(){
4 int fd, i, read_uid;
5 char burned_byte;
6 fd = open(DATAFILE, O_RDWR);
7 if(fd == -1)
8 fatal("update_player_data()内で、ファイルのオープン中にエラーが発生しました。");
9 read(fd, &read_uid, 4);
10 while(read_uid != player.uid){
11 for(i=0; i < sizeof(struct user) - 4; i++)
12 read(fd, &burned_byte, 1);
13 read(fd, &read_uid, 4);
}
14 write(fd, &(player.credits), 4);
15 write(fd, &(player.highscore), 4);
16 write(fd, &(player.name), 100);
17 close(fd);
}
No.9ベストアンサー
- 回答日時:
fopenをつかうなら、以降の読み書き、クローズなどはfread,fwrite,fcloseを使わないといけません。
まず、いまのまま、open,close,read,writeでいくのか
fopen,fclose,fread,fwriteでいくのか決めた方が良いかと。
いまのままでいくなら、
fd = open(DATAFILE, O_RDWR);を
fd = open(DATAFILE, O_RDWR|O_CREAT);
としてください。
そうすれば、ファイルがないときに、空のファイルを自動で作成してくれます。
No.6
- 回答日時:
No such file or directory は、
そのようなファイル、又はディレクトリはありませんという意味なので、
/var/chance.date をご確認ください。
No.3
- 回答日時:
DATAFILEの定義が提示されていないので、どのように定義されているか、わかりませんが、
DATAFILEはオープンするファイル名です。
このファイルが存在しないことが考えられます。
DATAFILEで示されるファイルが実際に存在するかどうか、チェックしてください。
又、DATAFILEは完全パスで指定したほうが確実です。
No.1
- 回答日時:
C言語の open() をググると、
int open(const char *path, int mode, [mode_t creat_mode])
とあります。
少なくとも、-1 が戻ってきているので、引数が間違ってると思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/02/05 09:55
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/06 13:01
- Visual Basic(VBA) Excelのマクロについて教えてください。 1 2023/03/12 12:16
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/11 11:05
- Windows Vista・XP AserAspireone USBでのBIOSの書き込み手順実施時電源ランプが点滅して先に進めません 2 2022/06/28 23:30
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/06/01 14:45
- USBメモリー・SDカード・フラッシュメモリー 銀行が振込データの受け渡しに未だにFDを使っている理由は「FDDがAドライブ固定だから」って本当? 11 2022/06/02 03:53
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 12:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fopenでディレクトリ内の全ファ...
-
VBAでCSVファイルを途中行まで...
-
教えて!perlから.exeファイル...
-
ExcelをCSV書き出す場合のシー...
-
パスから最後のディレクトリだ...
-
Excelマクロでフォルダ内のCSV...
-
VBAで巨大なファイルの途中から...
-
ListBoxのデータを高速でファイ...
-
batファイルでrenameができませ...
-
JavaでCSVファイルを高速に読む...
-
エクセルVBA コードが同じでも...
-
Firefox で file:// で始まる U...
-
fopen64について
-
Edge スクレイピング
-
ページ間での変数の受け渡し
-
バッチファイルの作り方(CSV→...
-
close()で例外が投げられる理由
-
動かなくなったのでJavaソース...
-
並び方、
-
AutoCADのスクリプト
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fopenでディレクトリ内の全ファ...
-
ファイルロックの解除方法
-
TSVファイルを読み込んでCSV形...
-
[perl] perlで書き込み中に、PC...
-
Cookieが保存できない。
-
最新のファイルのみ検索
-
perlをデスクトップのショート...
-
flockについて
-
perlでCSV形式ファイルのア...
-
ファイルの結合
-
unixでのファイルロックの方法...
-
CGI のモジュールをつかってフ...
-
ファイルがオープンできない
-
ファイルディスクリプタとは?
-
file_exists関数について
-
1行がやたら長いテキストをバッ...
-
ファイルの存在確認をしたい
-
HTMLの中にCGIファイルリンク
-
perl の printでのファイルへの...
-
Perl 処理速度について
おすすめ情報
早い回答本当にありがとうございます。
DATAFILEの状態?は
#define DATAFILE "/var/chance.date" //ユーザデータを格納するファイル
こんな感じです。
エラーについてはお察しの通り、
update_player_data()内で、ファイルのオープン中にエラーが発生し: No such file or directory
と表示されます。
型の情報が何も書いてないです。
ないみたいです。新しく作ったら治りますか?
fopenに書き直してみました。
warning: incompatible pointer to integer conversion assigning to 'int' from 'FILE *' (aka 'struct _IO_FILE *') [-Wint-conversion]
fd =fopen(DATAFILE, "w");