2013-07-10 21 views
2

我有用c寫的沙箱代碼。它有以下行: msb.sbox.task.ofd = STDOUT_FILENO;。這是可執行文件被寫入 標準output.I輸出要這樣改變這種輸出寫入到文件instead.I試圖做 這用C++中的文件指針替換stdout和stdin?

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

但這給出了警告warning: assignment makes integer from pointer without a cast [enabled by default]。如何做我去做吧?

+0

'STDOUT_FILENO'是Posix,而不是C++。 –

+0

對不起,我不知道 –

+0

@sashasami你不應該打開文件寫作,沒有閱讀? – Adam

回答

5

試試這個:

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

STDOUT_FILENOint,並fp是一個指向FILE結構,所以你的任務是不正確的。 fileno將從指針返回文件描述符(int值)到FILE結構,即什麼是fp

+0

感謝您的解釋:) –

4

如果看起來像結構成員正在期待一個文件ID號碼,而不是指向流式文件緩衝區的指針。使用filenoFILE*獲取ID。

#include <stdio.h> 

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

是啊!工作感謝很多 –