Consider the following code int main int argc charargv char

Consider the following code int main (int argc, char*argv[]) {char buf[] = \"abc\"; int r = open(\"file.txt\" 0_RDWR); int r1 = 0; int r2 = open(\"file.txt\" 0_RDWR); dup2(r, r1); read(r, buf, 1); read(r2, buf, 2); write (r, buf, 3); read(r2, buf, 1); write (r1, buf, 1); return 0; Assume that the disk file file.txt originally contains the string of bytes 12345. Also assume that all system calls succeed. What will file.txt contain when this code is compiled and run and why? Explain your answer by providing a high level description of the code functionality.

Solution

int main() {

char buf[] = \"abc\";
int r = open(\"file.txt\", O_RDWR);   //Opens the file file.txt for read and write with file descriptor r.
int r1 = 0;                           //Initializes an integer r1 to 0.
int r2 = open(\"file.txt\", O_RDWR);   //Opens the file file.txt for read and write with file descriptor r2.
dup2(r, r1);                           //Duplicates a file descriptor r with r1.
printf(\"%d %d %d\ \", r, r1, r2);
read(r, buf, 1);           //Reads 1 byte to buf, from file descriptor r. So, \'1\' will be read. And now the buf content is: \"1bc\"
read(r2, buf, 2);       //Reads 2 byte to buf, from file descriptor r2. So, \'12\' will be read. And now the buf content is: \"12c\"
write(r, buf, 3);       //Writes 3 bytes from buf to r, i.e., from position 2, 12c will be written to file. So, now the file will hold value 112c5  
read(r2, buf, 1);       //Reads 1 byte to buf, from file descriptor r2. So, 2 will be read. And now the buf content is: \"22c\"
write(r1, buf, 1);       //Writes 1 byte from buf, to r1, i.e., from position 5 2 will be written. So, now the file will hold value 112c2
printf(\"%s\ \", buf);
return 0;

}

So, finally, the content of file.txt after the execution of the code is: \"112c2\"

 Consider the following code int main (int argc, char*argv[]) {char buf[] = \

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site