Sort Numbers from File Using Unix Pipes in C Last Updated : 30 Jan, 2024 Comments Improve Suggest changes Like Article Like Report In this article, we will write a straightforward C program that sorts numerical data from a file using pipes and forks.The sorting process is carried out using the sort command and the execlp function of UNIX. Working of the ProgramWe need to include the following header files to use the relevant functions:#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <sys/wait.h>#include <fcntl.h>The name of the file to be read will be taken as the command line argument.After that, we create a pipe and store the file descriptor for it in the fd[] array.Then we create another process using fork() call.In the child process, sort() system call is called for the file passed as a command line argument, and the data returned by the sort() call is sent to the pipe. In the parent process, the data is received and read using the buffer and is printed on the console.C Program to Sort Numbers from File using Unix Pipes C // C Program to illustrate how to sort numbers from file using unix pipes #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <sys/wait.h> #include <fcntl.h> #define buffer 1024 int main(int argc, char *argv[]) { int id, fd[2]; char my_copy[buffer]; // Check if the user provides the correct number of arguments if (argc != 2) { printf("Usage: %s <input_file>\n", argv[0]); exit(1); } // Create a pipe if (pipe(fd) == -1) { perror("Pipe creation failed"); exit(2); } // Fork a child process id = fork(); // Check for fork errors if (id == -1) { printf("An error occurred with fork\n"); exit(3); } // Child process if (id == 0) { //Close read of the pipe close(fd[0]); //redirect stdout to pipe dup2(fd[1], STDOUT_FILENO); //execute 'sort' command execlp("sort", "sort", "-n", argv[1], NULL); perror("Error calling execl"); exit(4); } else { // Parent process //Close write of the pipe close(fd[1]); //wait for the child process to finish wait(NULL); // Open the read the pipe as a file FILE *pipe_fd = fdopen(fd[0], "r"); // Checking if the pipe is null if (pipe_fd == NULL) { perror("fdopen"); exit(5); } // Reading the data from the pipe and print them while ((fgets(my_copy, sizeof(my_copy), pipe_fd)) != NULL) { //Checks when there is a line break and prints the data if (strchr(my_copy, '\n') != NULL) { printf("Data received through pipe:%s", my_copy); } } // Close the FILE fclose(pipe_fd); } return 0; } OutputWhile running program, provide the file name you want to read, ./your_program_name [input file]Now assume that your file contains the the following data file.txt 28432168432184Then the output will be Data received through pipe:2Data received through pipe:84Data received through pipe:84Data received through pipe:321Data received through pipe:321Data received through pipe:684 Comment More infoAdvertise with us Next Article Sort Numbers from File Using Unix Pipes in C 8rnnv764ekbx7dz44cilg9q1g2z7dr09nwcyg9c4 Follow Improve Article Tags : C Programs Linux-Unix C++ cpp-file-handling C++ File Programs +1 More Practice Tags : CPP Similar Reads How to Read From a File in C? File handing in C is the process in which we create, open, read, write, and close operations on a file. C language provides different functions such as fopen(), fwrite(), fread(), fseek(), fprintf(), etc. to perform input, output, and many different C file operations in our program. In this article, 2 min read How to Read a File Line by Line in C? In C, reading a file line by line is a process that involves opening the file, reading its contents line by line until the end of the file is reached, processing each line as needed, and then closing the file.Reading a File Line by Line in CReading a file line by line is a step by step:1. Opening th 3 min read How to Read Input Until EOF in C? In C, reading input until the End of the File (EOF) involves reading input until it reaches the end i.e. end of file. In this article, we will learn various methods through which we can read inputs until EOF in C.Reading Input Until EOFRead Input Until EOF Using getchar()Read Input Until EOF Using f 5 min read Sorting integer data from file and calculate execution time Prerequisite: Selection Sort In this article, we are going to apply selection sort algorithm, in which the source of input is A FILE CONTAINING 10000 INTEGERS and output will be the total time taken to sort. Important functions to be used: rand(): Used to generate random numbers. fopen(): Used to op 3 min read Why to use fgets() over scanf() in C? Any time you use an *f function, whether it be printf, scanf, or their derivatives (fprintf, fscanf, etc...), you are doing more things than you might realize. Not only are you reading (or writing) something, but-and here's the problem- you are interpreting it. The format string can be thought of as 5 min read Like