1

エラーが発生した後はperror()、当然、 を呼び出します。しかし、これを行うとセグメンテーション違反が発生する printf("error: %s\n", strerror(errno));か、何が起こっているのかわかりません。

  int fd;
  if((fd = open(FILENAME, O_RDONLY)) == -1) {
    perror("fbi");
    exit(1);
  }

  for(;;) {

    readed = read(fd, buffer, BUFSIZE);

    if(readed == 0)
      break;

    if(readed == -1) {
      perror("fbi"); // <- here's the error
      exit(1);
    }

これを修正する方法は?

アップデート:

printf("%d\n", errno); // given 9

更新 2:

関数で渡されるバッファサイズと関係があるようrecv()です。の場合、上記のエラーが発生しますBUFSIZE1しかし、BUFSIZEたとえば、128 no error の場合。誰かがこの動作を説明できますか?

4

2 に答える 2

2

このスニペットから何が問題なのかを正確に知ることは不可能です。しかし、一般的には、「[rock solid c library func here] を呼び出すときにセグメンテーション違反が発生するのはなぜですか?」という質問に対する答えです。通常、スタックは揚げられています。もちろん、読み取りは主な容疑者です。

于 2012-10-27T18:22:33.900 に答える