• 0

[C] Using pipe


Question

I am writing a simple shell-like program. I'm stuck on writing the pipeline part. (IE: program_A | program_B )

I'm assuming I need to use pipe(), but I'm unsure how to do this exactly.

program_A reads from stdin, then it write to a pipe? The other end of this pipe is read in by program_B (but program_B normally reads from stdin, so how do I redirect it without messing up program_A?). program_B then outputs to stdout.

Do I setup the pipe, let program_A run and output to the pipe, then start program_B (after redirecting stdin to the pipe)?

Thanks!

Link to comment
https://www.neowin.net/forum/topic/845358-c-using-pipe/
Share on other sites

3 answers to this question

Recommended Posts

  • 0

Well,there are the dup functions that duplicates a file descriptor. Your program A should look something like this:

#include <unistd.h>
#include <errno.h>
#include <stdio.h>

//all other includes

int main(void)
{
		int mypipe[2];
		char message[255];

		if(pipe(mypipe) == -1)
		{
				   perror("\nCould not pipe");
				   return 0;
		 }
		 //now the fork part,we redirect the output after we use fork
		 //since the child process is an exact copy of the parent,it will have the same pipe
		 //so we can use that communicate between the processes
		 if(fork() != 0)
		 {
					//it means that this part of if will only execute in the original process,the "parent"
					//because the fork function has different outputs in the processes
					//in the parent,it returns the child's pid which is different from 0
										//in the child it returns 0
					//1 is the default descriptor for stdout so we close this descriptor
					//so that we  can use the "free" slot to add our own output,in our case
					//the write end of the pipe,meaning mypipe[1]
					printf("\nPlease enter message");
					close(1);
					if(dup2(mypipe[1],1) == -1)
					{
							   perrror("\nCould not set stdout);
							   return 0;
					}
					//now we are ready to read from the keyboard 
					//and when it outputs something,it will output it to the write end of the pipe
					//instead of stdout
					scanf("%s",mesage);
					printf("%s",message);
					//the output will be read by the other process,or any other processes that it will start
		 }
		 else
		 {
				   close(0);
				   //we close the standard input so we can replace it with our pipe's read end
				   if(dup(mypipe[0],0) == -1)
				   {
							   perror("\nCould not duplicate descriptor");
							   return 0;
				   }
				   //now we are ready to use any of the exec commands to replace the current process with another one
				   //the new process will inherit the descriptors,so when we read anything in it
				   //it will read what the other process outputs
				   if(execlp("program_B","program_B",NULL) == -1)
				   {
							perror("\nCould not execute program");
							return 0;
				   }
		 }
		 return 0;

}

Hope that answers at least some of your questions. Be carefull though,that the program might hang if it doesn't receive any input from the other process so you need to be carefull about that. And in my case,if one of the dup's fail,the other process will still remain active.

Edited by Cold Blood
Link to comment
https://www.neowin.net/forum/topic/845358-c-using-pipe/#findComment-591844958
Share on other sites

  • 0

That was useful. So, I've gotten it so that a single pipeline will work. Now I have to get it so any number will work (prog_A | prog_B | prog_C etc).

I just need to figure out how to write the for loop. I think I should setup program_A outside, then enter a loop which pipes and starts the next programs until each is started. I'll post so code once I figure it out in case someone else in the world needs help.

Link to comment
https://www.neowin.net/forum/topic/845358-c-using-pipe/#findComment-591846678
Share on other sites

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Microsoft releases new Windows 11 Media Creation Tool with the latest updates by Taras Buria Patch Tuesday updates arrive every month, bringing users new features and security updates. To make sure customers have access to the most recent images, Microsoft also releases updates to the Media Creation Tool app, its official utility for Windows 11 installation. Today, the company pushed new ISOs to Media Creation Tool, allowing you to create images with the June 2026 Patch Tuesday updates. With the latest update, the Media Creation Tool now downloads KB5094126. It is Windows 11 version 25H2, build 26200.8655, which is also available via Windows Update. Note that the app itself remains on the previous version, which you can check in Properties > Details. The only change is that it now downloads a more recent Windows 11 build, so the only way to check is to download an ISO. The June 2026 Patch Tuesday update is a special release for Windows 11, as it brings a new performance profile to make the operating system more responsive and snappier when rendering various user interface surfaces, including the Start menu, quick settings, and more. It does so by spiking processor speeds for a brief moment, resulting in higher loads for a second or two. The so-called “Low latency profile” is rolling out gradually, but you can force-enable it with the ViVeTool app. Other changes include webcam improvements, Task Manager updates, shared audio support, and more. You can download the Media Creation Tool app from the official Microsoft website using this link. Besides MCT, Microsoft lets you download Windows 11 ISO as a file directly from the official Windows 11 website. However, you will need a third-party app to write it to your USB drive. Check out this guide if you want to know how to do that.
    • Louis Rossmann suing Samsung over "990 Pro SSD warranty scam" by Sayan Sen Back in 2023, if you recall, Neowin reviewer Robbie Khan had a dispute with Samsung over his 990 Pro SSD, which was rapidly losing its health. After significant back and forth, the tech giant had finally released firmware to "stop" the issue. Interestingly, its previous flagship at the time, the 980 Pro was also facing problems leading to two consecutive sets of firmware fixes. Three years later, it looks like a similar conflict has now broken out between tech repair entrepreneur YouTuber Louis Rossmann and Samsung, as it has escalated into a threatened lawsuit after the company allegedly refused to appropriately replace a failing 990 Pro SSD that remained under warranty. According to Rossmann, a 4TB Samsung 990 Pro NVMe SSD purchased for approximately $330 less than two years ago, began experiencing major hiccups and issues, even though he claims it had been operated under ideal cooling conditions. It was installed in a RAID 1 array and cooled by a heatsink and dual high-speed fans. However the drive reportedly started dropping out of the array, exhibiting controller-level failures that eventually became not useable in any meaningful way. Rossmann said Samsung’s support process was marked by delays and confusion from the very start. After initially contacting the wrong regional support channel, he was redirected to Samsung’s memory support division where he submitted detailed diagnostics, logs, and proof of purchase. Rossmann runs a repair company and owns an ACE Lab PC-3000 machine, which is a professional-grade data recovery equipment. As such, he had been confident in his diagnostics. Samsung even seemingly acknowledged that later. Regardless, Rossmann claims that his initial support ticket was automatically closed before a full 24-hour response window had elapsed, forcing him to reopen the case and resubmit documentation. The controversy however intensified further from here after Samsung accepted the drive for warranty evaluation but later returned it with a repair report stating that the drive had passed its testing and that the SSD had been verified as functional. Rossmann strongly disputed those claims citing that his own independent testing on PC-3000 showed write speeds reducing to as low as 40–60 MB/s before the drive failed entirely. Samsung subsequently informed him that the SSD had been reset and reflashed, passing internal stress tests. However, the company also stated that replacement units were unavailable due to an industry-wide memory shortage and suggested that a refund process could be initiated if further testing confirmed the fault. Thus, to settle, the company offered a refund of $330, the amount that was initially paid by him to make the purchase. Here, Rossmann pointed out the seeming hypocrisy of the tech giant as in how no Samsung drive was apparently allocated for warranty replacements, but they were abundantly available for retail sales especially when using business accounts. As you can see, Rossmann is indeed right, there are Samsung 990 Pro 4TB SSDs on Amazon currently for $950 (shipped and sold by first-party Amazon US itself), and they are also available on Samsung's own store too, albeit for an even higher price of $1100. Thus Rossmann argues that Samsung’s inability or unwillingness to provide a replacement while the same model remains available for purchase at significantly higher market prices reflects a failure to honor its warranty obligations. He has issued a formal 60-day notice and says he intends to file suit in Texas small claims court, asserting that companies should face greater costs for denying legitimate warranty claims than for fulfilling them. You can check out the full video titled "Samsung's 990 Pro SSD warranty policy is a scam; I'm taking them to court," at the link below. Source and image: Louis Rossmann (YouTube) As an Amazon Associate we earn from qualifying purchases
    • Was it too much to ask to show the icon in this article?
    • Frankly, I blame whoever is writing such articles. "A big improvement/update and/or new feature is now available to everyone! Also, use this unofficial tweak tool to enable it because it actually isn't available to you yet officially and might not in fact even be entirely ready or whatever, hence why it is perhaps not enabled for you*. But it's great and you should enable it!" I mean there's nothing wrong with sharing info about some feature you might need to enable via unofficial means, of course. It's just that these articles tend to essentially end up being two news pieces in one, and one of them tends to be a bit misleading. (*Yes, yes, the "it's a controlled rollout!" thing. Not a fan of that one either. The argument, not the actual rollout.)
  • Recent Achievements

    • Week One Done
      davidbazooked earned a badge
      Week One Done
    • One Month Later
      Jamswaz earned a badge
      One Month Later
    • Week One Done
      Jamswaz earned a badge
      Week One Done
    • Rookie
      Marzoid went up a rank
      Rookie
    • Community Regular
      coch went up a rank
      Community Regular
  • Popular Contributors

    1. 1
      +primortal
      509
    2. 2
      PsYcHoKiLLa
      185
    3. 3
      +Edouard
      158
    4. 4
      Steven P.
      83
    5. 5
      ATLien_0
      75
  • Tell a friend

    Love Neowin? Tell a friend!