Amr*_*hna 0 c unix linux multithreading io-redirection
我正在编写一个多线程程序.该计划的结构如下
int main()
{
printf("To Call threads\n");
thread1=pthread_create(&trd1,NULL,process1,(void *)sleepTimeForP1);
thread2=pthread_create(&trd2,NULL,process2,(void *)sleepTimeForP2);
pthread_join(trd1, NULL);
pthread_join(trd2, NULL);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
线程的代码是
void *process1 (void *sleepTimeForP1)
{
int *tsleepTimeForP1 = (int *)sleepTimeForP1;
while(1)
{
pthread_mutex_lock(&lock);
printf("inside thread\n");
pthread_mutex_unlock(&lock);
sleep(1);
}
}
Run Code Online (Sandbox Code Playgroud)
代码工作正常,并在没有输出重定向时打印输出.但是,当给出输出重定向时,文件中不会获得输出.现在,如果我fflush(stdout)
在每个printf()
语句后都明确说明,那么我得到了所需的输出.为什么我需要给出明确的fflush()?
从C99§7.19.3[7]:
最初打开时,标准错误流未完全缓冲; 当且仅当可以确定流不参考交互设备时,标准输入和标准输出流被完全缓冲.
'全缓冲'(vs'线缓冲'):C99§7.19.3[3]
当流被完全缓冲时,当填充缓冲区时,字符将作为块传输到主机环境或从主机环境传输.当流被行缓冲时,当遇到换行符时,字符将作为块传输到主机环境或从主机环境传输.
因此,当标准输出是交互式的(例如shell)时,它是行缓冲的.但是,当您将其重定向到文件时,它将变为完全缓冲,您必须使用fflush
.
归档时间: |
|
查看次数: |
99 次 |
最近记录: |