ファイルへのデータの書き込みと読み取りのためのいくつかの GCD 関数で遊んでいます。これらの関数のうちの 2 つはdispatch_write()
とで、新しいチャネルdispatch_read()
を設定することなくファイル記述子にデータを読み書きできるようにします。dispatch_io_t
だから、私は次のコードを持っています:
#import <dispatch/dispatch.h>
#import <stdio.h>
#import <unistd.h>
int main() {
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
int intbuffer[] = { 1, 2, 3, 4 };
dispatch_data_t data = dispatch_data_create(intbuffer, 4 * sizeof(int), queue, NULL);
// Write
dispatch_fd_t fd = open("data.dat", O_RDWR);
printf("FD: %d\n", fd);
dispatch_write(fd, data, queue,^(dispatch_data_t d, int e) {
printf("Written %zu bytes!\n", dispatch_data_get_size(d));
printf("\tError: %d\n", e);
});
close(fd);
// Read
fd = open("data.dat", O_RDWR);
dispatch_read(fd, 4 * sizeof(int), queue, ^(dispatch_data_t d, int e) {
printf("Read %zu bytes!\n", dispatch_data_get_size(d));
printf("\tError: %d\n", e);
});
close(fd);
// Exit confirmation
getchar();
return 0;
}
これを使用して、4 整数配列をファイルに書き込み、その後、それを読み戻そうとしています。以前data.dat
にコマンドで作成しましたがtouch
、誰でも完全にアクセスできます ( sudo chmod 777 data.dat
)。
このコードを実行すると、プログラムは有効なファイル記述子である を出力しますが、何も書き込まないためdata.dat
、正常に開いたように見えます。FD: 3
dispatch_write
Written 0 bytes!
Error: 9
Read 0 bytes!
Error: 9
エラー 9 はエラーのコードですEBADF
が、3 は有効なファイル記述子です。
それで、私は何を間違っていますか?