[英]Redericting stdout and stdin
我想重新發送stdout,stderr來文件和來自char *的stdin。 我的目標是用C語言。
當我運行此代碼時:
int main(){
stdout=fopen("/home/user/file.txt","w");
printf("aaaa");
printf("\nbbbb");
system("/bin/bash");
sprintf("stdin","exit");
return 0;
}
文件沒有一些字符串和bash從控制台獲取參數。 蟲子在哪里?
您不想分配給stdout
。 相反,你(可能)想要使用freopen
,在你的情況下,如: freopen("/home/user/file.txt","w", stdout);
如果/當您在內部進行所有處理時,通常最好編寫代碼以接收FILE *
作為參數,並傳遞正確的值。 當你有直接寫入stdout
外部代碼時,這不起作用。
編輯:我可能還應該提到freopen
另一個嚴重問題 - 沒有提供方法將其恢復到上一個流。 這是你再次使用freopen
,並知道將寫入控制台(或其他)的路徑。
stdout
不應該用作左值。 嘗試使用fprintf()函數而不是printf()來獲得所需的效果。
至於從bash重定向stdout,你能不能用/usr/bin/bash >> /home/user/file.txt
調用它?
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
int main(void){
int ret;
FILE *fp;
int stdout_bk;
stdout_bk = dup(fileno(stdout));
fp=fopen("/home/user/file.txt","w");
dup2(fileno(fp), fileno(stdout));
ret = system("/bin/bash");
//flushall();//for vc
fflush(stdout);//for gcc
fclose(fp);
dup2(stdout_bk, fileno(stdout));//restore
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.