I have been trying to use Syscalls a bit but am getting an exception I can't figure out why.
Opening code throws no exceptions: var flags = OpenFlags.O_RDWR | OpenFlags.O_DIRECT | OpenFlags.O_CREAT; //var f = NativeConvert.FromOpenFlags(flags); not needed? var han = Syscall.open(path, flags, FilePermissions.S_IRWXU); if(han < 0) throw new Win32Exception(); var handle = new SafeFileHandle((IntPtr) han, true); if(handle.IsInvalid) throw new Exception("Invalid handle"); return handle; Then I call write: fixed (byte* b = buffer) { long ret = 0; do { ret = Syscall.write (handle.DangerousGetHandle().ToInt32(), b ,count); } while (Mono.Unix.UnixMarshal.ShouldRetrySyscall ((int) ret)); if(ret == -1) Mono.Unix.UnixMarshal.ThrowExceptionForLastErrorIf ((int) ret); } I get an invalid parameter exception. Read seems to work following a similar pattern so not quite sure whats wrong. My writes are of size 4096. Perhaps the issue is needing to call memalign? I would expect reads to fail as well then though Cheers, Greg 13) Test Error : EventStore.Core.Tests.TransactionLog.Unbuffered.UnbufferedTests.when_writing_then_seeking_exact_to_alignment_and_writing_again System.ArgumentException : Invalid argument ----> Mono.Unix.UnixIOException : Invalid argument [EINVAL]. at Mono.Unix.UnixMarshal.ThrowExceptionForLastError () [0x00000] in <filename unknown>:0 at Mono.Unix.UnixMarshal.ThrowExceptionForLastErrorIf (Int32 retval) [0x00000] in <filename unknown>:0 at EventStore.Core.TransactionLog.Unbuffered.NativeFile.Write (Microsoft.Win32.SafeHandles.SafeFileHandle handle, System.Byte[] buffer, UInt32 count, System.Int32& written) [0x00000] in <filename unknown>:0 at EventStore.Core.TransactionLog.Unbuffered.UnbufferedIOFileStream.InternalWrite (System.Byte[] buffer, UInt32 count) [0x00000] in <filename unknown>:0 at EventStore.Core.TransactionLog.Unbuffered.UnbufferedIOFileStream.Flush () [0x00000] in <filename unknown>:0 at EventStore.Core.TransactionLog.Unbuffered.UnbufferedIOFileStream.Dispose (Boolean disposing) [0x00000] in <filename unknown>:0 at System.IO.Stream.Close () [0x00000] in <filename unknown>:0 at System.IO.Stream.Dispose () [0x00000] in <filename unknown>:0 at EventStore.Core.Tests.TransactionLog.Unbuffered.UnbufferedTests.when_writing_then_seeking_exact_to_alignment_and_writing_again () [0x00000] in <filename unknown>:0 at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&) at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0 --UnixIOException -- Studying for the Turing test _______________________________________________ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list