Sponsored Content
Full Discussion: Pipelining Processes
Top Forums Programming Pipelining Processes Post 63095 by Trivialnight on Tuesday 22nd of February 2005 04:11:38 PM
Old 02-22-2005
Pipelining Processes

I am doing a program that will calculate the 199th fibonacci number using pipelines and multiple processes for each calculation. I have figured everything out except why none of the processes before the last one never execute the findfib() function;

Our teacher gave us the pipeline code to redirect stdin and stdout, but even when i execute the example file he gave us with it. It still is just running the findfib function at the last process only, I would go ask him about it but today he doesn't have any office hours. All the right headers are there. I have written the code for calculate the numbers using strings and whatnot but this is the only thing that is holding me back from completing. It seems as though the child never equals the parent which makes it not go into the if parent parent.

Code:
int
main(int argc, char *argv[])
{
   int i,nproc;
   if(chkargs(argc,argv) == 0) exit(1);
   nproc = strtol(argv[1],0,0);
   mkpipeln(&i,nproc);
   findfib(i,nproc);
   exit(0);
}

void
mkpipeln(int *id, int np)
{  int fd[2]; pid_t child;
   for(*id = 1; *id < np; (*id)++) {
       if(pipe(fd) < 0) die("pipe-1 failed");
       if((child = fork()) < 0) die("fork failed");
       if(child > 0){

         if(dup2(fd[1],1) < 0) die("dup2-1 failed");
         if((close(fd[0]) < 0) || (close(fd[1]) < 0)) die("close-1 failed");
         break;
       }
       else{
         if(dup2(fd[0],0) < 0) die("dup2-2 failed");
         if((close(fd[0]) < 0) || (close(fd[1]) < 0)) die("close-2 failed");
       }
   }
   printf("id: %d\n", *id);
}

void
findfib(int id, int np)
{  printf("id: %d\n", id);
}

Now shouldn't it print out each ID in each process?

-tn
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

co-processes

Is it possible to have a main script (i will call it main.ksh) that executes say, 4 other scripts (sub_prog_1.ksh, sub_prog_2.ksh etc..) from within this main.ksh (simultaneously/in parallel), have them run in the background and communicate back to main.ksh when complete? My guess is to use... (1 Reply)
Discussion started by: google
1 Replies

2. UNIX for Dummies Questions & Answers

processes

What command string will locate ONLY the PID of a process and ouput only the number of PID of the process? (1 Reply)
Discussion started by: mma_buc_98
1 Replies

3. Shell Programming and Scripting

I need some example of Co-Processes

I want to know how to work the Co-Processes in kornshell scripts. So, I very need some script about Co-Processes! thanks ...:) (3 Replies)
Discussion started by: javalee
3 Replies

4. Shell Programming and Scripting

Pipelining

My problem is more a question of how to do it more elegantly than how to do it at all. The problem: I have a pipeline which has to write to the screen AND to a logfile: proc1 | tee -a <logfile> What makes things difficult is i also need the return code of proc1. But proc1 | tee -a... (6 Replies)
Discussion started by: bakunin
6 Replies

5. UNIX for Advanced & Expert Users

Monitoring Processes - Killing hung processes

Is there a way to monitor certain processes and if they hang too long to kill them, but certain scripts which are expected to take a long time to let them go? Thank you Richard (4 Replies)
Discussion started by: ukndoit
4 Replies

6. Solaris

Identifying and grouping OS processes and APP processes

Hi Is there an easy way to identify and group currently running processes into OS processes and APP processes. Not all applications are installed as packages. Any free tools or scripts to do this? Many thanks. (2 Replies)
Discussion started by: wilsonee
2 Replies

7. Shell Programming and Scripting

Bash pipelining

Hello, There is a symbolic link in a folder. I would like to read destination of this link and get base name of pointed file. Let's say, there is symlink : symlink -> ../file.txt. I can do that what I want by this script: readlink symlink | while read var do echo `basename $var` done but... (1 Reply)
Discussion started by: scdmb
1 Replies

8. UNIX for Dummies Questions & Answers

Processes

Hi all, I needed a little help. It's OS thing. Suppose I have 2 machine connect over a network, I will call my machines as M1and M2. If I copy a files from M1 to M2. What tasks are these two machine performing for copy to work. My assumption is that M1 is performing read action and... (1 Reply)
Discussion started by: vishwesh
1 Replies

9. Shell Programming and Scripting

Finding the age of a unix process, killing old processes, killing zombie processes

I had issues with processes locking up. This script checks for processes and kills them if they are older than a certain time. Its uses some functions you'll need to define or remove, like slog() which I use for logging, and is_running() which checks if this script is already running so you can... (0 Replies)
Discussion started by: sukerman
0 Replies

10. UNIX for Dummies Questions & Answers

Pipelining with tar

Hello, I am currently interning at a place and my job is to essentially learn UNIX. My supervisor gives me problems here and there to help guide me with my learning but for the most part I'm doing this all by self-teaching myself. Needless to say I have run into a few obstacles...for... (12 Replies)
Discussion started by: huntreilly25
12 Replies
getpriority(2)							System Calls Manual						    getpriority(2)

NAME
getpriority, setpriority - get or set process priority SYNOPSIS
DESCRIPTION
returns the priority of the indicated processes. sets the priority of the indicated processes to priority. The processes are indicated by which and who, where which can have one of the following values: Get or set the priority of the specified process where who is the process ID. A who of implies the process ID of the calling process. Get or set the priority of the specified process group where who is the process-group ID, indicating all processes belonging to that process-group. A who of implies the process-group ID of the calling process. Get or set the priority of the specified user where who is the user ID, indicating all processes owned by that user. A who of implies the user ID of the calling process. If more than one process is indicated, the value returned by is the lowest valued priority of all the indicated processes, and sets the priority of all indicated processes. priority is a value from to where lower values indicate better priorities. The default priority for a process is 0. If the calling process contains more than one thread or lightweight process (i.e., the process is multi-threaded) these functions shall apply to all threads or lightweight processes in the calling process. The priority specified (or retrieved) is the same for all threads or lightweight processes in a process. Negative priorities require appropriate privileges. Security Restrictions These system calls are subject to compartmental restrictions which restrict their access to processes in other compartments. This restric- tion covers for querying the priority of processes in other compartments, and for changing the priority of processes in other compartments. See compartments(5) for more information about compartmentalization on systems that support that feature. Compartmental restrictions can be overridden if the process has the privilege (PRIV_COMMALLOWED). Processes owned by the superuser may not have this privilege. Processes owned by any user may have this privilege, depending on system configuration. requires the privilege (PRIV_OWNER) to change the priority of a process whose uid does not match the caller's real or effective uid.. Pro- cesses owned by the superuser have this privilege. Processes owned by other users may have this privilege, depending on system configura- tion. requires the privilege (PRIV_LIMIT). Processes owned by the superuser have this privilege. Processes owned by other users may have this privilege, depending on system configuration. RETURN VALUE
returns the following values: Successful completion. n is an integer priority in the range to Failure. is set to indicate the error. See WARNINGS below. returns the following values: Successful completion. Failure. is set to indicate the error. ERRORS
If or fails, is set to one of the following values: [EACCES] The calling process does not have access rights to change one or more of the indicated processes. All processes for which access is allowed are still affected. [EINVAL] which is not one of the choices listed above, or who is out of range. [EPERM] The calling process attempted to change the priority of a process to a smaller priority value without having appro- priate privileges. [ESRCH] Processes indicated by which and who cannot be found. WARNINGS
can return both when it successfully finds a priority of and when it fails. To determine whether a failure occurred, set to before calling then examine after the call returns. AUTHOR
and were developed by the University of California, Berkeley. SEE ALSO
nice(1), renice(1M), nice(2). getpriority(2)
All times are GMT -4. The time now is 07:17 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy