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ランキング
-
C#,vb.netで業務用アプリ開発と...
-
研究室志望の提出文書
-
へんな現象
-
gccを行ってもexeファイルが生...
-
Linux Cプログラミングを学ぶた...
-
こんなことてしますか??
-
mallocについて
-
LinuxカーネルのCFSで用いられ...
-
C言語 列挙型(enum型)変数について
-
パイソン。If elseの挙動につい...
-
C言語 1から20までの逆数の和を...
-
Windows Formアプリからコンソ...
-
C言語 配列と関数の練習問題
-
だいがくの電し書籍で
-
C言語初心者です、、、お助けく...
-
C++のcinの動作
-
応用情報技術者試験の令和元年...
-
ArduinoのジャイロモジュールMP...
-
c言語
-
MACで動く実行ファイルをWindow...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fopenでディレクトリ内の全ファ...
-
unixでのファイルロックの方法...
-
1行がやたら長いテキストをバッ...
-
VBでファイル分割の方法
-
ファイルの結合
-
ファイルがオープンできない
-
【PHP】アクセス過多でファ...
-
ファイルディスクリプタとは?
-
ファイルの存在確認をしたい
-
printscreenについて。
-
バッチファイルの作り方(CSV→...
-
awkスクリプトでダブルクォーテ...
-
VBAでCSVファイルの特定行を書...
-
DOSコマンドで、標準出力を出力...
-
ExcelをCSV書き出す場合のシー...
-
openした後、closeしないでプロ...
-
close()で例外が投げられる理由
-
batファイルでrenameができませ...
-
VBAでCSVファイルを途中行まで...
-
window.open でのファイル指定方法
おすすめ情報
早い回答本当にありがとうございます。
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");