Linux Debugging Questions & Answers – Named and Un-named Pipe Calls

This set of Linux Debugging questions and answers focuses on Named and Un-named Pipe Calls.

1. What is the output of this program?

  1.    #include<stdio.h>
  2.    #include<string.h>
  3.  
  4.    int main()
  5.    {
  6.        int fd[2];
  7.        int count;
  8.        char buffer[6];
  9.        if( pipe(fd) != 0)
  10.            perror("pipe");
  11.        memset(buffer,'\0',6);
  12.        count=write(fd[1],"Linux",6);
  13.        read(fd[0],buffer,6);
  14.        printf("%s\n",buffer);
  15.        return 0;put
  16.    }

a) this program will print the string “Linux”
b) this program will print nothing because the buffer is empty
c) segmentation fault
d) none of the mentioned
View Answer

Answer: a
Explanation: The data in buffer is written by the pipe.
Output:
[root@localhost sanfoundry]# gcc -o san san.c
[root@localhost sanfoundry]# ./san
Linux
[root@localhost sanfoundry]#

2. What is the output of this program?

advertisement
  1.    #include<stdio.h>
  2.    #include<stdlib.h>
  3.  
  4.    int main()
  5.    {
  6.        int fd[2];
  7.        int child;
  8.        char buff[6];
  9.        if(pipe(fd) != 0)               
  10.            perror("pipe");
  11.        child=fork();
  12.        switch(child){
  13.            case -1 :
  14.                perror("fork");
  15.                exit(1);
  16.            case 0 :
  17.                if (write(fd[1],"Linux",6) != 6)
  18.                    perror("write");
  19.                    break;
  20.                default :
  21.                    read(fd[0],buff,6);
  22.                    printf("%s\n",buff);
  23.                    break;
  24.        }
  25.        return 0;
  26.    }

a) this program will print the string “Linux”
b) this program will print nothing
c) segmentation fault
d) none of the mentioned
View Answer

Answer: a
Explanation: One process can read and write to another process by pipe.
Output:
[root@localhost sanfoundry]# gcc -o san san.c
[root@localhost sanfoundry]# ./san
Linux
[root@localhost sanfoundry]#
Free 30-Day Python Certification Bootcamp is Live. Join Now!

3. What is the output of this program?

  1.    #include<stdio.h>
  2.    #include<fcntl.h>
  3.  
  4.    int main()
  5.    {
  6.        int fd;
  7.        char buff[512];
  8.        if( mkfifo("/tmp/test_fifo",0666) == -1)
  9.            perror("mkfifo");       
  10.        fd = open("/tmp/test_fifo",O_RDONLY);
  11.        read(fd,buff,512);
  12.        printf("%s\n",buff);
  13.        return 0;
  14.    }

a) this program will print the garbage of 512 bytes
b) this program will print nothing
c) segmentation fault
d) none of the mentioned
View Answer

Answer: b
Explanation: In this program the fifo is opened in read only mode. Hence the process will remain block on read.
Output:
[root@localhost sanfoundry]# gcc -o san san.c
[root@localhost sanfoundry]# ./san
^Z
[12]+ Stopped ./san
[root@localhost sanfoundry]#

4. This program will print the _____ string.

advertisement
  1.    #include<stdio.h>
  2.  
  3.    int main()
  4.    {
  5.        int fd[2];
  6.        char buff[11];
  7.        if (pipe(fd) != 0)
  8.            perror("pipe");
  9.        write(fd[1],"Sanfoundry",11);
  10.        lseek(fd[0],0,3);
  11.        read(fd[0],buff,11);
  12.        printf("%s\n",buff);
  13.        return 0;
  14.    }

a) “Sanfoundry”
b) “San”
c) “foundry”
d) none of the mentioned
View Answer

Answer: a
Explanation: The “lseek” system call does not work with pipes.
Output:
[root@localhost sanfoundry]# gcc -o san san.c
[root@localhost sanfoundry]# ./san
Sanfoundry
[root@localhost sanfoundry]#

5. What is the output of this program?

  1.    #include<stdio.h>
  2.  
  3.    int main()
  4.    {
  5.        if (mkfifo("/tmp/test_fifo",0666) != 0)
  6.            perror("mkfifo");
  7.        if (mkfifo("/tmp/test_fifo",0666) != 0)
  8.            perror("mkfifo");
  9.        return 0;
  10.    }

a) this program will create two named pipes “test_fifo” in the /tmp directory
b) this program will create one named pipe “test_fifo” in the /tmp directory
c) segmentation fault
d) none of the mentioned
View Answer

Answer: b
Explanation: In this program when the mkfifo executes second time, the fifo already exists. Hence it gives error.
Output:
[root@localhost sanfoundry]# gcc -o san san.c
[root@localhost sanfoundry]# ./san
mkfifo: File exists
[root@localhost sanfoundry]#

6. What is the output of this program?

  1.    #include<stdio.h>
  2.    #include<fcntl.h>
  3.  
  4.    int main()
  5.    {
  6.        int fd, count;
  7.        char buff[10];
  8.        if (mkfifo("/tmp/test_fifo",0666) != 0)
  9.            perror("mkfifo");
  10.        fd = open("/tmp/test_fifo",O_RDONLY|O_NONBLOCK);
  11.        count = read(fd,buff,10);
  12.        printf("%d\n",count);
  13.        return 0;
  14.    }

a) 0
b) -1
c) 10
d) none of the mentioned
View Answer

Answer: a
Explanation: The read system call will return 0 bytes.
Output:
[root@localhost sanfoundry]# gcc -o san san.c
[root@localhost sanfoundry]# ./san
0
[root@localhost sanfoundry]#

7. This program will print the value

  1.    #include<stdio.h>
  2.    #include<fcntl.h>
  3.  
  4.    int main()
  5.    {
  6.        int rfd, wfd, count;
  7.        char buff[11];
  8.        if (mkfifo("/tmp/test_fifo",0666) != 0)
  9.            perror("mkfifo");
  10.        wfd = open("/tmp/test_fifo",O_WRONLY|O_NONBLOCK);
  11.        count = write(wfd,"Sanfoundry",11);
  12.        printf("%d\n",count);
  13.        rfd = open("/tmp/test_fifo",O_RDONLY|O_NONBLOCK);
  14.        count = read(rfd,buff,11);
  15.        return 0;
  16.    }

a) 0
b) -1
c) 11
d) none of the mentioned
View Answer

Answer: b
Explanation: The “write” system call will return -1 because named pipe is open only for writing. In named pipe writing can only be done when it is open for read and write both.
Output:
[root@localhost sanfoundry]# gcc -o san san.c
[root@localhost sanfoundry]# ./san
-1
[root@localhost sanfoundry]#

8. What is the output of this program?

  1.    #include<stdio.h>
  2.  
  3.    int main()
  4.    {
  5.        int fd[3],count;
  6.        if (pipe(fd) != 0)
  7.            perror("pipe");
  8.        count = write(fd[2],"Hello",6);
  9.        printf("%d\n",count);
  10.        return 0;
  11.    }

a) 6
b) 0
c) -1
d) segmentation fault
View Answer

Answer: c
Explanation: Data can be written only in fd[1].
Output:
[root@localhost sanfoundry]# gcc -o san san.c
[root@localhost sanfoundry]# ./san
-1
[root@localhost sanfoundry]#

9. In this program the fifo “my_fifo”

  1.    #include<stdio.h>
  2.  
  3.    int main()
  4.    {
  5.        if (mkfifo("my_fifo",0666) != 0)
  6.            perror("mkfifo");
  7.        return 0;
  8.    }

a) can not be created
b) will be created in present working directory
c) will have the execute permissions
d) none of the mentioned
View Answer

Answer: b
Explanation: None.
Output:
[root@localhost sanfoundry]# ls
san san.c
[root@localhost sanfoundry]# gcc -o san san.c
[root@localhost sanfoundry]# ./san
[root@localhost sanfoundry]# ll
total 12
prw-r–r–. 1 root root 0 Aug 21 15:04 my_fifo
-rwxr-xr-x. 1 root root 4925 Aug 21 15:04 san
-rw-r–r–. 1 root root 99 Aug 21 15:01 san.c
[root@localhost sanfoundry]#

10. What is the output of this when the pipe is successfully created?

  1.     #include<stdio.h>
  2.  
  3.     int main()
  4.     {
  5.         int ret_val;
  6.         int fd[2];
  7.         ret_val = pipe(fd);
  8.         printf("%d\n",ret_val);
  9.         return 0;
  10.     }

a) 0
b) -1
c) 1
d) none of the mentioned
View Answer

Answer: a
Explanation: The “pipe” system call returns 0 on the successfull creation of the pipe.
Output:
[root@localhost sanfoundry]# gcc -o san san.c
[root@localhost sanfoundry]# ./san
0
[root@localhost sanfoundry]#

Sanfoundry Global Education & Learning Series – Linux Administration & Programming.
Here’s the list of Best Books in Linux Commands & Shell Programming.
Here’s the list of Best Books in Linux Kernel, Device-Drivers & System Programming.

To practice all questions on Linux Administration & Programming, here is complete set of 1000+ Multiple Choice Questions and Answers on Linux.

advertisement
advertisement
Subscribe to our Newsletters (Subject-wise). Participate in the Sanfoundry Certification contest to get free Certificate of Merit. Join our social networks below and stay updated with latest contests, videos, internships and jobs!

Youtube | Telegram | LinkedIn | Instagram | Facebook | Twitter | Pinterest
Manish Bhojasia - Founder & CTO at Sanfoundry
I’m Manish - Founder and CTO at Sanfoundry. I’ve been working in tech for over 25 years, with deep focus on Linux kernel, SAN technologies, Advanced C, Full Stack and Scalable website designs.

You can connect with me on LinkedIn, watch my Youtube Masterclasses, or join my Telegram tech discussions.

If you’re in your 40s–60s and exploring new directions in your career, I also offer mentoring. Learn more here.