Exemplo n.º 1
0
        /// <summary>
        /// Opens a file
        /// </summary>
        /// <param name="path">The path</param>
        /// <param name="flags">The flags</param>
        /// <returns>The file descriptor ID</returns>
        public static int Open(string path, int flags)
        {
            if (path.Length == 0)
            {
                return(-(int)ErrorCode.EINVAL);
            }

            Node node = null;

            // Check if O_CREATE
            if ((flags & 0x0200) > 0)
            {
                node = VFS.GetOffsetNodeByPath(path, 1);

                node = VFS.Create(node, "test");
                if (node == null)
                {
                    return(-(int)ErrorCode.ENOENT);
                }
            }
            else
            {
                node = VFS.GetByPath(path);
                if (node == null)
                {
                    return(-(int)ErrorCode.ENOENT);
                }

                VFS.Open(node, flags);
            }

            FileDescriptors descriptors = Tasking.CurrentTask.FileDescriptors;

            return(descriptors.AddNode(node));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Creates a UNIX pipe
        /// </summary>
        /// <param name="pipefd">The pipe file descriptors (output)</param>
        /// <returns>The errorcode</returns>
        public static unsafe ErrorCode Pipe(int *pipefd)
        {
            Node[]    nodes = new Node[2];
            ErrorCode error = PipeFS.Create(nodes, PipeFS.DefaultPipeSize);

            if (error != ErrorCode.SUCCESS)
            {
                Heap.Free(nodes);
                return(error);
            }

            FileDescriptors descriptors = Tasking.CurrentTask.FileDescriptors;

            pipefd[0] = descriptors.AddNode(nodes[0]);
            pipefd[1] = descriptors.AddNode(nodes[1]);

            Heap.Free(nodes);

            return(ErrorCode.SUCCESS);
        }