После еще одного прочтения справочных страниц я наконец нашел идеальный ответ.Оказывается, Mac OS на самом деле имеет механизм, очень похожий на O_DIRECT, но не через функцию open, а через fcntl.В частности, есть опция F_NOCACHE, которая позволяет вам включать или выключать кеш для определенного файлового дескриптора, что именно то, что я хотел.См. http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man2/fcntl.2.html для ознакомления с полным перечнем других вещей, которые вы можете сделать с Mac-версией fcntl, и объяснением ее точного использования.Я надеюсь, что этот ответ поможет кому-то еще.
http://lists.apple.com/archives/filesystem-dev/2007/Sep/msg00010.html Хорошая тема, объясняющая, как ведет себя флаг F_NOCACHE в зависимости от номера версии вашего Mac OS.
Окончательный код (в ходу):
r1, r2, err := syscall.Syscall(syscall.SYS_FCNTL, uintptr(self.file.Fd()), syscall.F_NOCACHE, 1)
if err != 0 {
fmt.Printf("Syscall to SYS_FCNTL failed\n\tr1=%v, r2=%v, err=%v\n", r1, r2, err)
self.Close()
return false
}