遠藤です。

DEPRECATED(int rb_getc(FILE*));
DEPRECATED(long rb_io_fread(char *, long, FILE *));
DEPRECATED(long rb_io_fwrite(const char *, long, FILE *));
DEPRECATED(int rb_read_pending(FILE*));

というのが ruby/io.h にありますが、試しにこれらを使ってみた
ところ、インタプリタがフリーズしました。

$ ../ruby -rfoo -e 'foo'
(^C が効かない)

実際、rb_io_fread が io_fread を呼び、READ_DATA_PENDING で
未初期化の rbuf_len を参照していて、まともに動くような感じ
ではないように見えました。
rb_io_fwrite も動いていないような気がします。


README.EXT に記載されていないのであれば、中途半端に残すより
削除してしまったらどうでしょうか。


以下、検証に使ったコードです。
もし使い方が間違っていたらすみません。

#include "ruby.h"
#include "ruby/io.h"

VALUE foo(VALUE self)
{
  int i;
  char buf[11];
  FILE *fp;

  fp = fopen("foo", "r+");
  i = rb_io_fread(buf, 10, fp);
  buf[i] = '\0';
  fclose(fp);
  printf("\"%s\"\n", buf);

/*
  fp = fopen("bar", "w");
  rb_io_fwrite("foobarbaz\n", 10, fp);
  fflush(fp);
  fclose(fp);
*/

  return Qnil;
}

void Init_foo()
{
 rb_define_global_function("foo", foo, 0);
}

-- 
Yusuke ENDOH <mame / tsg.ne.jp>