- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这是我在 Stackoverflow 上的第一步!
因此,我尝试使用 setbuf()
将 stdout
重定向到 char buffer[BUFSIZ]
。当我使用 printf()
时,它工作得很好,但当我使用系统调用 write()
时,它就完全不工作了。
这是一个代码示例:
#include <stdio.h>
#include <unistd.h>
int main(void)
{
char buffer[BUFSIZ];
freopen("/dev/null", "a", stdout);
setbuf(stdout, buffer);
printf("This works\n");
write(stdout->_file, "This doesn't.\n", 14);
fflush(stdout);
freopen("/dev/tty", "a", stdout);
printf("Buffer content :\n%s", buffer);
return 0;
}
输出是
Buffer content :
This works
你知道为什么吗?因为现在我不知道这是如何工作的,所以我会将 stdout 通过管道传输到 stdin,然后读取结果——我认为这不是最简洁的方法。
谢谢你,祝你有美好的一天!
最佳答案
write
函数是一个低级 POSIX 函数,其运行级别低于 C 标准输出函数。
通过直接使用write
,您可以绕过stdio 缓冲。如果要使用缓冲区,请使用标准 C fwrite
函数代替。
另请注意,stdout
是一个FILE*
,而FILE
是一个不透明的数据结构。您永远不应尝试直接使用它的成员。
关于c - setbuf() - printf() 和 write(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52152581/
来自 Ubuntu 上的 man setbuf: You must make sure that the space that buf points to still exists by the ti
我正在开发一个 basic_streambuf 来处理从/到 Winsock 套接字的读取和写入。就像 basic_filebuf 一样,我在内部使用 std::codecvt 对象将从底层套接字读取
我的问题如下:Martin York this 中的 claim , this , 和 this回答可以使用 basic_stringbuf::pubsetbuf 像这样从一段内存中读取 string
这是我在 Stackoverflow 上的第一步! 因此,我尝试使用 setbuf() 将 stdout 重定向到 char buffer[BUFSIZ]。当我使用 printf() 时,它工作得很好
程序 1: #include void main() { printf("Hello\n"); } 输出: $strace ./a.out
再一次,我的老师无法回答我的问题。我知道谁能... 所以,我从来没有真正学过 C。在 C++ 中,显然,我会一直使用 cout 语句。在最近的作业中,我的老师告诉我们一定要把 setbuf( stdo
setbuf 函数什么时候有用(NULL 值除外)? 我尝试发明这些例子,但我还是做不到。 我了解 setvbuf 如何发挥作用,但我不了解 setbuf。 最佳答案 基本上,setvbuf 是一个较
将VS2005中的“setbuf”移植到VS2008需要做哪些改动? 我必须将 VS2005 中的项目修改为 VS2008 才能构建它。下面是需要在VS2008中编译的代码行。 std::ifstr
如果我想使用标识符NULL怎么办?在 gdb的调用语句? 是因为我没有在 gdb 中包含 stdio.h 吗? 我试过:call #include 但这似乎不起作用。 最佳答案 NULL是一个 C 定
Linux seq_file 接口(interface)中是否有一个setbuf(stdout, NULL) 等效函数? 据我所知,通过 setbuf(stdout, NULL),printf 函数立
我是一名优秀的程序员,十分优秀!