用c ++中的文件指针替换stdout和stdin?

时间:2013-07-10 21:48:47

标签: c++ posix

我有一个用c编写的沙箱代码。它中包含以下行: msb.sbox.task.ofd = STDOUT_FILENO;。这是可执行文件的输出写入 标准输出。我想改变它,所以输出被写入文件而不是。我试过 此

  FILE * fp;
  fp=fopen("myf","w");
  msb.sbox.task.ofd=fp;

但这会发出警告warning: assignment makes integer from pointer without a cast [enabled by default]。我该如何解决?

2 个答案:

答案 0 :(得分:5)

试试这个:

  FILE * fp;
  fp=fopen("myf","r");
  msb.sbox.task.ofd=fileno(fp);

STDOUT_FILENOint,而fp是指向FILE结构的指针,因此您的分配不正确。 fileno将从指向int结构的指针返回文件描述符(FILE值),即fp

答案 1 :(得分:4)

如果看起来结构成员期望文件ID号而不是指向流式文件缓冲区的指针。使用filenoFILE*获取ID。

#include <stdio.h>

FILE * fp;
fp=fopen("myf","r");
msb.sbox.task.ofd=fileno(fp);