74 lines
2.0 KiB
Plaintext
74 lines
2.0 KiB
Plaintext
|
|
Answer the following questions to describe your code submission. Please keep
|
||
|
|
all lines to a maximum of 80 characters wide.
|
||
|
|
|
||
|
|
1 - In pseudo-code, show your general algorithm for setting up two processes
|
||
|
|
that are connected by a pipe. You need to show all calls to relevant
|
||
|
|
functions (e.g., pipe(), fork(), etc.) but you do not need to show error
|
||
|
|
checking or precise syntax.
|
||
|
|
|
||
|
|
pipes[# of processes][2]
|
||
|
|
for process in processes:
|
||
|
|
pipe(pipes[process #])
|
||
|
|
|
||
|
|
for process in processes:
|
||
|
|
if not first process:
|
||
|
|
add_dup2(pipes[process #][0], stdin)
|
||
|
|
|
||
|
|
if not last process:
|
||
|
|
add_dup2(pipes[process #][1], stdout)
|
||
|
|
|
||
|
|
for pipe in pipes:
|
||
|
|
add_close(pipe[0])
|
||
|
|
add_close(pipe[1])
|
||
|
|
|
||
|
|
if process is util:
|
||
|
|
posix_spawn(process)
|
||
|
|
else:
|
||
|
|
posix_spawnp(process)
|
||
|
|
|
||
|
|
|
||
|
|
2 - The project does not ask you to implement pipes with built-ins, but show
|
||
|
|
a pseudo-code approach to modifying echo for this purpose. For simplicity,
|
||
|
|
ignore the issues of escape characters and environment variables, and
|
||
|
|
assume that echo only writes into the pipe. Specifically, what would be
|
||
|
|
the flow of relevant functions (pipe(), fork(), etc.) for the following
|
||
|
|
command line:
|
||
|
|
|
||
|
|
$ echo hello world | cut -f2
|
||
|
|
|
||
|
|
(HINT: Be careful that you do NOT close or redirect the shell's STDOUT,
|
||
|
|
which would prevent it from displaying any more prompts!)
|
||
|
|
|
||
|
|
pipefd[2]
|
||
|
|
pipe(fd)
|
||
|
|
|
||
|
|
echo(pipefd[1], "Message") // Modify echo to take in a file descriptor to write to
|
||
|
|
close(pipefd[1])
|
||
|
|
|
||
|
|
add_dup2(pipefd[0], stdin)
|
||
|
|
add_close(pipefd[0]);
|
||
|
|
|
||
|
|
posix_spawnp("cut", argv)
|
||
|
|
|
||
|
|
close(pipefd[0])
|
||
|
|
|
||
|
|
|
||
|
|
3 - The project does not ask you to implement file redirection, but show a
|
||
|
|
general algorithm in pseudo-code (like above) for the following command
|
||
|
|
line (note that 2>&1 says to send STDERR to the same file as STDOUT):
|
||
|
|
|
||
|
|
$ ls > data.txt 2>&1
|
||
|
|
|
||
|
|
fd = open("data.txt")
|
||
|
|
|
||
|
|
add_dup2(fd, stdout)
|
||
|
|
add_dup2(fd, stderr)
|
||
|
|
|
||
|
|
add_close(fd)
|
||
|
|
|
||
|
|
posix_spawnp("ls", argv)
|
||
|
|
|
||
|
|
close(fd)
|
||
|
|
|
||
|
|
|