1

FIONBIO を設定する VxWorks の標準的な方法は、 withioctl()ではなくwithfcntl()です。onFIONBIO のドキュメントには、データ型がないため、明らかにコンパイルされない例としてこれが示されています。

on = TRUE;
status = ioctl (sFd, FIONBIO, &on);

このようなものを使用するように言っているネットの周りの使用例を見てきました(これは本質的に同じことです):

int on = 1;
ioctl(fd, FIONBIO, &on);

ただし、ドキュメントには のプロトタイプが でioctl()あると記載されておりioctl(int, int, int)、 に変換できないというエラーが表示int*されintます。値を として渡すとint、致命的なカーネル タスク レベルの例外が発生します。

これは私の現在のコードです:

int SetBlocking(int sockfd, bool blocking)
{
  int nonblock = !blocking;
  return ioctl(sockfd, FIONBIO, &nonblock);
}

エラーを返します:

error: invalid conversion from `int*' to `int'
initializing argument 3 of `int ioctl(int, int, int)'
4

2 に答える 2

2

このリンクhttp://publib.boulder.ibm.com/infocenter/tpfhelp/current/index.jsp?topic=%2Fcom.ibm.ztpf-ztpfdf.doc_put.cur%2Fgtpc2%2Fcpp_ioctl.htmlが示唆しています

 return ioctl(sockfd, FIONBIO, (char*) &nonblock);
于 2012-07-25T16:24:56.223 に答える
1

ここで見つけました。

to をキャストする必要があるようint*ですint。私はc-styleのキャストが使えないので、reinterpret_cast.

int SetBlocking(int sockfd, bool blocking)
{
  int nonblock = !blocking;

  return ioctl(sockfd,
    FIONBIO,
    reinterpret_cast<int>(&nonblock));
}
于 2012-07-25T16:50:53.227 に答える