printf
可以暂停打印输出吗?如果是,可以有人为我提供相关背景。例如
是否有可能打印printf()
printf("Hello World\n")
首先打印"H"
然后睡觉10秒,然后打印"ello World"
答案 0 :(得分:4)
是的,有可能。
由于您使用printf
(而不是fprintf
),输出将被放置在标准输出上,现在如果您将输出重定向到阻止写入的文件/设备,则此简单调用{{1可以睡觉,例如10秒。
情景:
创建echo.c:
printf
创建一个名为fifo:
#include <stdio.h>
main() {
printf("Hello World\n");
}
编译echo.c:
mkfifo fifo
运行echo并将其输出重定向到make echo
:
fifo
这会阻塞,直到某个其他进程读取./echo > fifo
文件,因此在不同的shell运行10秒后:
fifo
只有cat fifo
程序能够继续并将“Hello World \ n”写入echo
文件
答案 1 :(得分:2)
printf最终调用write()。如果write()系统调用返回-1,因为系统调用接收到EINTR,那么可能已经写入了一些数据。但是,tty(屏幕)是行缓冲的。这意味着在输出流上放置\n
字符之前,屏幕上不会显示任何内容。
所以,我没有得到你所看到的。你看到了什么问题?
答案 2 :(得分:0)
您可以编写自己的printf
版本(比如printf_delay
),它会打印您的字符串,并遍历每个字符,打印然后再睡眠一段指定的时间。
e.g:
void printf_delay(char* str, unsigned int delay){
int c=0;
while (str[c] != '\0'){
/* Print character */
/* Sleep for */
/* Increment c */
}
}
答案 3 :(得分:0)
我看到了两个解决方案:
只需将printf()
划分为两个printf()
printf("H");
sleep(10);
printf("ello World\r\n");
另一种方法是重写putc()
函数。 printf()
使用它来输出字符,因此如果在putc()
中添加一些延迟,则会打印出符号之间的10秒钟。 注意:此延迟将针对您的任何字符实施,而不仅适用于一次和一次。
int putc(int c, FILE *fp){
char ch;
ch = c;
write(fp->fd, &ch, 1);
sleep(10);
return(c);
}
int main(){
char test[] = "Hello World\r\n";
printf("%s", test);
return 0;
}
PS:我从某个网页上获取了putc()
来源,请在使用之前重新检查(也许找到其他任何putc()
实现)。