[Mono-dev] Mono.Unix.Native

Greg Young gregoryyoung1 at gmail.com
Mon Jan 12 02:19:44 UTC 2015


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 <gregoryyoung1 at 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


More information about the Mono-devel-list mailing list