我正在使用 ioctl() 从应用程序调用驱动程序函数。通过使用日志,我发现我的内核代码首先执行。例如,
在我的应用程序中
printf("调用驱动程序"); ioctl();
在我的驱动程序中
printk("驱动调用");
当我执行我的代码时,首先它打印“驱动程序调用”然后“调用驱动程序”我有什么理由吗?
我正在使用 ioctl() 从应用程序调用驱动程序函数。通过使用日志,我发现我的内核代码首先执行。例如,
在我的应用程序中
printf("调用驱动程序"); ioctl();
在我的驱动程序中
printk("驱动调用");
当我执行我的代码时,首先它打印“驱动程序调用”然后“调用驱动程序”我有什么理由吗?
默认情况下,stdout
流是缓冲的,并且数据仅在换行符之后(或执行结束)显示。在这种情况下,显示是在ioctl
调用之后完成的。
您可以在通话fflush
后强制使用显示。printf
printf("Calling Driver");
fflush(stdout);
ioctl();
有关更多详细信息,您可以阅读这些答案。