我有一个用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]
。我该如何解决?
答案 0 :(得分:5)
试试这个:
FILE * fp;
fp=fopen("myf","r");
msb.sbox.task.ofd=fileno(fp);
STDOUT_FILENO
是int
,而fp
是指向FILE
结构的指针,因此您的分配不正确。
fileno
将从指向int
结构的指针返回文件描述符(FILE
值),即fp
。
答案 1 :(得分:4)
如果看起来结构成员期望文件ID号而不是指向流式文件缓冲区的指针。使用fileno
从FILE*
获取ID。
#include <stdio.h>
FILE * fp;
fp=fopen("myf","r");
msb.sbox.task.ofd=fileno(fp);