【发布时间】:2012-12-31 08:46:15
【问题描述】:
我正在使用 ioctl() 从应用程序调用驱动程序函数。通过使用日志,我发现我的内核代码首先执行。例如,
在我的应用程序中
printf("调用驱动程序"); ioctl();
在我的驱动程序中
printk("驱动调用");
当我执行我的代码时,首先打印“Driver called”,然后是“Calling Driver” 我有什么理由吗?
【问题讨论】:
我正在使用 ioctl() 从应用程序调用驱动程序函数。通过使用日志,我发现我的内核代码首先执行。例如,
在我的应用程序中
printf("调用驱动程序"); ioctl();
在我的驱动程序中
printk("驱动调用");
当我执行我的代码时,首先打印“Driver called”,然后是“Calling Driver” 我有什么理由吗?
【问题讨论】:
默认情况下,stdout 流被缓冲,并且数据仅在换行符之后(或执行结束)显示。在这种情况下,显示在ioctl 调用之后完成。
您可以在调用printf 后使用fflush 强制显示。
printf("Calling Driver");
fflush(stdout);
ioctl();
更多详情可以阅读these answers。
【讨论】: