フラグを使用してO_DIRECT
、ユーザー バッファーから直接ディスクに書き込みます。しかし、私の知る限り、Linux はこの呼び出しの後にデータが書き込まれることを保証していません。DMA などを使用して、ユーザー バッファーから物理デバイスに直接書き込むだけです。したがって、「書き込み」関数の呼び出し後にユーザー バッファーに書き込めるかどうかわかりません。
サンプルコードが私の質問を理解するのに役立つと確信しています:
char *user_buff = malloc(...); /* assume it is aligned as needed */
fd = open(..., O_DIRECT);
write(fd, ...)
memset(user_buff, 0, ...)
最後の行 (memset) は有効ですか? データをデバイスに転送するために DMA によって使用される可能性があるユーザー バッファへの書き込みは有効ですか?