ホーム>source

mmapを使用してファイルから読み取ります。
mmapはerrno 22、無効な引数を返します。
この場合のstat.st_sizeは400で、「大きすぎる」とは思いません。
「addr、length、offsetは好きではない」とは思いません。
私はこのプログラムをIntel Xeon E5で実行しています(これは関係ないと思います)。
ここで何が欠けていますか?

<前>ウィズウィズ if( argc > 1 ) { struct stat stat; for( int i = 1; i < argc; i++ ) { if( access(argv[i], R_OK) == -1 ) { printf("\n Cannot access datatype description file %s\n", argv[i]); continue; } int fd = open(argv[i], O_RDONLY); if( fd == -1 ) { printf("\n Cannot open datatype description from file %s\n", argv[i]); continue; } if( fstat(fd, &stat) == -1 ) { printf("\n Cannot stat the %s file\n", argv[i]); continue; } void* addr = mmap(NULL, stat.st_size, PROT_READ, MAP_FILE, fd, 0); if( MAP_FAILED == addr ) { printf("\nCannot map the datatype description file %s\n", argv[i]); printf("%s %d stat.st_size %d\n", strerror(errno), errno, stat.st_size ); perror("mmap"); close(fd); continue; } munmap(addr, stat.st_size); free(addr); close(fd); } }
あなたの答え
  • 解決した方法 # 1

    man 2 mmap から :

    <前>ウィズウィズ

    MAP_FILE Compatibility flag. Ignored. ... EINVAL flags contained neither MAP_PRIVATE or MAP_SHARED, or contained both of these values. の1つを渡す必要があります  または MAP_PRIVATE 、そしてあなたは MAP_SHARED を渡すのをやめるべきです 。 (あなたはそれが何をしたとさえ思ったのですか?)

    MAP_FILE

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ json - Pythonを使用してXMLファイルから目的のXML要素のみを解析およびフェッチする方法は?