コード例 #1
0
        public UnixStream Open(FileMode mode, FileAccess access, FilePermissions perms)
        {
            OpenFlags openFlags = NativeConvert.ToOpenFlags(mode, access);
            int       num       = Syscall.open(base.FullPath, openFlags, perms);

            if (num < 0)
            {
                UnixMarshal.ThrowExceptionForLastError();
            }
            return(new UnixStream(num));
        }
コード例 #2
0
ファイル: SocketTest.cs プロジェクト: akoeplinger/mono.posix
        [ExpectedException(typeof(ArgumentOutOfRangeException))]           // SOCK_NONBLOCK, SOCK_CLOEXEC not supported
#endif
        public void Accept4()
        {
            WithSockets(UnixAddressFamily.AF_UNIX, UnixSocketType.SOCK_STREAM, 0, (so1, so2) => {
                var address = new SockaddrUn(TempFolder + "/socket2");
                if (Syscall.bind(so1, address) < 0)
                {
                    UnixMarshal.ThrowExceptionForLastError();
                }
                if (Syscall.listen(so1, 5) < 0)
                {
                    UnixMarshal.ThrowExceptionForLastError();
                }
                if (Syscall.connect(so2, address) < 0)
                {
                    UnixMarshal.ThrowExceptionForLastError();
                }

                int so3;
                var remote = new SockaddrUn();
                if ((so3 = Syscall.accept4(so1, remote, UnixSocketFlags.SOCK_CLOEXEC | UnixSocketFlags.SOCK_NONBLOCK)) < 0)
                {
                    UnixMarshal.ThrowExceptionForLastError();
                }
                try {
                    int _flags;
                    if ((_flags = Syscall.fcntl(so3, FcntlCommand.F_GETFL)) < 0)
                    {
                        UnixMarshal.ThrowExceptionForLastError();
                    }
                    var flags = NativeConvert.ToOpenFlags(_flags);
                    Assert.IsTrue((flags & OpenFlags.O_NONBLOCK) != 0);

                    int _flagsFD;
                    if ((_flagsFD = Syscall.fcntl(so3, FcntlCommand.F_GETFD)) < 0)
                    {
                        UnixMarshal.ThrowExceptionForLastError();
                    }
                    // FD_CLOEXEC must be set
                    //var flagsFD = NativeConvert.ToFdFlags (_flagsFD);
                    //Assert.IsTrue ((flagsFD & FdFlags.FD_CLOEXEC) != 0);
                    Assert.IsTrue(_flagsFD != 0);
                } finally {
                    if (Syscall.close(so3) < 0)
                    {
                        UnixMarshal.ThrowExceptionForLastError();
                    }
                }
            });
        }
コード例 #3
0
 public UnixStream Open(FileMode mode)
 {
     return(this.Open(NativeConvert.ToOpenFlags(mode, FileAccess.ReadWrite)));
 }
コード例 #4
0
 public UnixStream Open(FileMode mode, FileAccess access)
 {
     return(this.Open(NativeConvert.ToOpenFlags(mode, access)));
 }
コード例 #5
0
ファイル: PathInfo.cs プロジェクト: zhang024/FuseSharp
 // TODO check this
 public static void CopyFromPtr(IntPtr source, PathInfo dest)
 {
     Interop.adaptor_ptrToPathInfo(source, dest);
     dest.flags = NativeConvert.ToOpenFlags((int)dest.flags);
 }