我有一些库函数的麻烦。 我必须编写一些C代码,它使用库函数在屏幕上打印其内部步骤。 我对它的返回值不感兴趣,但只对打印的步骤感兴趣。 所以,我认为我必须从标准输出读取并将读取的字符串复制到缓冲区中。 我已经尝试过fscanf和dup2但是我无法从标准输出中读取。请帮帮我吗?C语言。从标准输出读取
回答
我假设你的意思是标准输入。另一个可能的功能是gets
,使用man gets
来了解它是如何工作的(非常简单)。请出示您的代码并解释您失败的位置以获得更好的答案。
不,OP正在讨论'stdout'。他有一个库函数写入'stdout',并且他想拦截那个输出。 –
感谢大家。我使用了发布的解决方案。有用! ;) – user2479368
好的,但仍然有一件事我不忍受。 为什么如果我想读取书面文件,我不能? 我无法发布代码因为8小时必须通过:S – user2479368
您应该能够打开一个管道,DUP写入结束到标准输出,然后从管道的读端读,像下面,错误检查:
int fds[2];
pipe(fds);
dup2(fds[1], stdout);
read(fds[0], buf, buf_sz);
好的,我用非纯粹的解决方案修复了它。我用C++。 – user2479368
FILE *fp;
int stdout_bk;//is fd for stdout backup
stdout_bk = dup(fileno(stdout));
fp=fopen("temp.txt","w");//file out, after read from file
dup2(fileno(fp), fileno(stdout));
/* ... */
fflush(stdout);//flushall();
fclose(fp);
dup2(stdout_bk, fileno(stdout));//restore
以前的答案的扩展版本,没有使用文件,并捕获标准输出的管道,而不是:
#include <stdio.h>
#include <unistd.h>
main()
{
int stdout_bk; //is fd for stdout backup
printf("this is before redirection\n");
stdout_bk = dup(fileno(stdout));
int pipefd[2];
pipe2(pipefd, 0); // O_NONBLOCK);
// What used to be stdout will now go to the pipe.
dup2(pipefd[1], fileno(stdout));
printf("this is printed much later!\n");
fflush(stdout);//flushall();
write(pipefd[1], "good-bye", 9); // null-terminated string!
close(pipefd[1]);
dup2(stdout_bk, fileno(stdout));//restore
printf("this is now\n");
char buf[101];
read(pipefd[0], buf, 100);
printf("got this from the pipe >>>%s<<<\n", buf);
}
生成以下的输出:
this is before redirection
this is now
got this from the pipe >>>this is printed much later!
good-bye<<<
多么真棒的答案! –
- 1. 写入标准输出并从标准输入读取C
- 2. C++从标准输入和标准输出读取
- 3. VB.NET读取标准输出
- 4. 从gjs读取异步标准输出
- 5. WScript.Shell.Exec - 从标准输出读取
- 6. 从标准输入读取libxml2在C
- 7. 从标准输入读取C++
- 8. 从标准输入读取
- 9. 从标准输入和输出读取到标准输出是什么意思?
- 10. 从C中的标准输出读取是可能的?
- 11. 如何从C#读取PowerShell脚本标准输出和标准错误#
- 12. 阅读()从标准输入读取流
- 13. 从标准输入读取使用读
- 14. C#与阅读标准输出问题
- 15. 如何逐行读取标准输出?
- 16. 从标准输入读取和打印到红宝石标准输出
- 17. 从标准输出获取输出的系统命令C
- 18. 在C语言输出中写入和读取CSV文件
- 19. 从标准输入读取数字行
- 20. Pylint:从标准输入读取?
- 21. 从标准输入读取,直到EOF
- 22. 从标准输入流中读取Hadoop
- 23. Haskell从标准输入读取文件
- 24. 从python的标准输入读取行?
- 25. 非阻塞从标准输入读取
- 26. 从标准输入异步读取
- 27. 从标准输入读取整数
- 28. 的wget从标准输入读取
- 29. 从标准输入读取密码
- 30. netbeans从标准输入读取
显示你试过的代码,请!如果你制作了一个管道并正确使用了'dup2',你应该可以做你想做的事情。 –