3

iOS(iPad)で実行されている単純なプログラムがあります。このプログラムは、ファイルを開き、データを書き込み、ファイルを閉じてから、ファイルを再度開こうとします。奇妙なことに、2番目のオープンがリターンコード-1およびerrno 13(許可拒否)で失敗することがあります。コードを数回実行すると、失敗と成功が交互に発生します(パターンはランダムに見えます)。

以下は私が使用しているコードです、誰かが私が間違っていることを説明できますか?最初のオープンは常に成功し、書き込みも常に成功します。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"file.txt"];

result = remove([appFile cStringUsingEncoding:NSASCIIStringEncoding]);

int fp = open([appFile cStringUsingEncoding:NSASCIIStringEncoding], O_RDWR | O_CREAT);
result = write(fp, "abc", 3);
close(fp);

fp = open([appFile cStringUsingEncoding:NSASCIIStringEncoding], O_RDONLY);
NSLog(@"fp = %i, errno = %i", fp, errno);
close(fp);
4

2 に答える 2

3

open(2) のマンページから:

The oflag argument may indicate that the file is to be created if it does
not exist (by specifying the O_CREAT flag). In this case, open requires a
third argument mode_t mode;

3 番目の引数を指定しないと、ランダムな値が使用されるため、失敗することがあります。3 番目のパラメーター 0644 を追加すると、常に機能します。

于 2013-02-13T22:53:10.280 に答える