/// <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)); }
/// <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); }