Suppose that the file “tmpdata.txt” contains “abcdefghijk”. If the following cod
ID: 3855609 • Letter: S
Question
Suppose that the file “tmpdata.txt” contains “abcdefghijk”. If the following code is executed correctly without generating any errors.
1: int fd;
2: char buf[6] = “12345”;
3: fd = open(“tmpdata.txt”, O_RDONLY);
4: fork( );
5: read(fd, buf, 2);
6: read(fd, buf+2, 2);
7: printf(“%d: %s ”, (long)getpid(), buf);
i. Explain if the following two outputs are possible or not. Why/why not? Suppose the parent's pid is 7 while the child's pid is 8.
FIRST OUTPUT:
7: a2bc5
8: a2b45
SECOND OUTPUT:
7: a2c45
8: b2de5
ii. What could the outputs be if line 3 and 4 are exchanged? Write at least 3 possible outputs. Suppose the parent's pid is 7 while the child's pid is 8.
Please explain answers. I imagine this has something to do with race conditions, due to the parent and child executing the same code-block, but I'm mostly unsure of how read() function is affected by this.
Explanation / Answer
The output is
7: a2c45
8: b2de5
because we cannot have
7: a2bc5
8: a2b45
as output. Since file pointers are stored by Operating Systems, they are global to both the processes and are shared. In FIRST option, the executable reads 'a' as well as 'b' twice which is very unlikely. But in Second option, the file pointer maintains its state.
if 3 and 4 were exchanged, i.e., we fork even before we open the file. This will cause two different file pointers. So the file reads will not be affected and will idependently work. We can have only two possible output:
7: a2bc5
8: a2bc5
OR
8: a2bc5
7: a2bc5
The answer has been verified by execution the code on various Systems. If you need any clarification, do comment
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.