ioctl()を使用して、アプリケーションからドライバー関数を呼び出しています。ログを使用することで、カーネルコードが最初に実行されていることがわかりました。例えば、
私のアプリケーションでは
printf( "Calling Driver"); ioctl();
私の運転手で
printk( "ドライバーが呼び出されました");
コードを実行すると、最初に「Driver called」が出力され、次に「CallingDriver」が出力されます。これには何か理由がありますか?
ioctl()を使用して、アプリケーションからドライバー関数を呼び出しています。ログを使用することで、カーネルコードが最初に実行されていることがわかりました。例えば、
私のアプリケーションでは
printf( "Calling Driver"); ioctl();
私の運転手で
printk( "ドライバーが呼び出されました");
コードを実行すると、最初に「Driver called」が出力され、次に「CallingDriver」が出力されます。これには何か理由がありますか?
デフォルトでは、stdout
ストリームはバッファリングされ、データは改行(または実行の終了)の後にのみ表示されます。この場合、表示はioctl
通話後に行われます。
fflush
呼び出し後にを使用して、強制的に表示することができますprintf
。
printf("Calling Driver");
fflush(stdout);
ioctl();
詳細については、これらの回答を読むことができます。