Oops read is failing as well. Aside from having aligned buffer sizes do I need to do something like memalign?
Cheers, Greg On Mon, Jan 12, 2015 at 3:55 AM, Greg Young <gregoryyou...@gmail.com> wrote: > 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 -- 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