Tag: stdout

Scanf / Printf双变量C.

假设我在C中有以下代码: double var; scanf(“%lf”, &var); printf(“%lf”, var); printf(“%f”, var); 它从stdin变量’var’读取,然后在stdout’var’中打印两次。 我理解你是如何从stdin读取双变量的,但我的问题是: 为什么你可以用%lf打印双倍? 为什么你可以用%f打印双倍? 使用哪一种更好更正确?

如何在C中以编程方式实现“tee”?

我在C中寻找一种以编程方式(即,不使用命令行重定向)实现’tee’function的方式,以便我的stdout同时转到stdout和日志文件。 这需要适用于我的代码和输出到stdout的所有链接库。 有什么办法吗?

从C中的stdout输出系统命令

我正在Android / Linux下编写一个运行系统命令的C程序。 该命令将一些文本输出到stdout,我正在尝试将输出捕获到字符串或字符数组中。 例如: system(“ls”); 会将当前目录的内容列为stdout,我希望能够以C编程方式将该数据捕获到C中。 我该怎么做呢? 谢谢。

确定是否在C / C ++中重定向过程输出

我正在为Linux编写命令行实用程序。 如果输出(stdout)转到shell,那么打印一些转义来着色输出会很不错。 但是,如果输出被重定向,那么bash转义不应该打印,或者内容可能会破坏依赖于该输出的解析器。 有几个程序执行此操作(suck as ack )但我发现的是用Perl编写的,我无法找到他们是如何做到的。 我想用C / C ++来编写我的实用程序。

C将stdout恢复到终端

我正在使用multithreading程序。 首先,我将stdout重定向到某个文件。 没问题(我使用了dup2(fd, 1) ,其中fd是文件的文件描述符)。 之后,我需要再次将我的stdout重定向到终端。 我的第一个方法: /*Declaration*/ fpost_t stream_sdout; /*code*/ if ( fgetpos( stdout, &stream_sdout) == -1 ) perror(Error:); 它说非法寻求。 不知道为什么会这样。 但是,如果我让它工作,那么我只需要使用fsetpos(stdout, &stream_stdout) ,它应该工作。 我的第二个想法是使用dup2(stdout, 4)将dup2(stdout, 4)复制到位置4的文件描述符表。但是这也不起作用。 如何将标准输出切换回其原始目标(终端,管道,文件等)?

c stdout打印没有换行?

我想在c中的stdout上打印“CLIENT>”,没有换行。 的printf( “CLIENT>”); 不打印enything。 我该如何解决这个问题? int main (){ printf(“CLIENT>”); }

write()到stdout和printf输出没有交错?

#include #define MAXLEN 256 int main() { int n; char buf[MAXLEN]; while((n = read(0,buf,sizeof(buf))) != 0){ printf(“n: %d:”,n); write(1,buf,n); } return 1; } 程序的输出(第一次read和第一次write由用户键入并由终端回显)是: read read write write n: 5:n: 6: printf的输出在标准输入处按Ctrl + D后出现,而不是随后的读取。 为什么会这样?

如何在内存中缓冲stdout并从专用线程写入

我有一个包含许多工作线程的C应用程序。 至关重要的是这些不会阻塞工作线程需要写入磁盘上的文件,我让它们写入内存中的循环缓冲区,然后有一个专用线程将该缓冲区写入磁盘。 工作线程不再阻塞。 专用线程可以在写入磁盘时安全地阻塞,而不会影响工作线程(写入磁盘时它不会保持锁定)。 我的内存缓冲区调整得足够大,以至于编写器线程可以跟上。 一切都很好。 我的问题是,我如何为stdout实现类似的东西? 我可以将macro printf()写入内存缓冲区,但是我无法控制可能写入stdout的所有代码(其中一些代码在第三方库中)。 思考? NickB

读取stdin冲洗stdout吗?

当连接到终端时,stdout是行缓冲的,但我记得在某处阅读(至少从stdin)将自动刷新stdout。 我使用的所有C实现都已经完成了,但我现在无法在标准中找到它。 它确实有意义,它是这样的,否则代码是这样的: printf(“Type some input: “); fgets(line, sizeof line, stdin); 需要额外的fflush(stdout); 那么stdout保证会在这里刷新吗? 编辑: 正如几个回复所说,标准中似乎无法保证我的示例中的stdout输出将在从stdin读取之前出现,但另一方面,这个意图在(我的免费草稿副本)中说明了标准: 交互设备的输入和输出动态应按照7.19.3的规定进行。 这些要求的目的是尽快出现无缓冲或行缓冲输出,以确保在程序等待输入之前实际出现提示消息。 (ISO / IEC 9899:TC2委员会草案 – 2005年5月6日,第14页)。 所以似乎没有保证,但无论如何它可能适用于大多数实现。 (著名遗言…)

如何在freopen(“out.txt”,“a”,stdout)之后将输出重定向回屏幕

#include int main() { printf(“This goes to screen\n”); freopen(“out.txt”, “a”, stdout); printf(“This goes to out.txt”); freopen(“/dev/stdout”, “a”, stdout); printf(“This should go to screen too, but doesn’t\n”); return 0; } 我调用freopen将stdout重定向到out.txt然后我在文件上打印一些内容,现在我想将它重定向回屏幕,但是freopen(“/ dev / stdout”,“a”,stdout); 不起作用。 有没有办法使用ANSI C或POSIX系统调用?