Sponsored Content
Full Discussion: How I can explain this?
Top Forums UNIX for Dummies Questions & Answers How I can explain this? Post 302751331 by dakota on Thursday 3rd of January 2013 05:14:29 PM
Old 01-03-2013
I think 2, code acts on a child process.
The code is this:

Code:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#define BUFSIZE 256
int main(int argc, char *argv[])
{
pid_t childpid;
int fd[2], status, exit_code, a, b, x;
char buf[BUFSIZE];
unsigned strsize;
exit_code = EXIT_SUCCESS;
if (argc != 2)
{
printf(“Usage: %s digito_2\n”, argv[0]);
exit_code = EXIT_FAILURE;
}
else
{
if (pipe(fd) != 0)
{
perror(“Could not create the pipe\n”);
exit_code = EXIT_FAILURE;
}
else
{
switch (childpid = fork())
{
case -1:
perror(“Could not fork\n");
exit_code = EXIT_FAILURE;
break;
case 0:
if (dup2(fd[1], STDOUT_FILENO) < 0)
{
perror(“Child: fd duplication failed\n”);
exit_code = EXIT_FAILURE;
}
else
{
close(fd[0]);
close(fd[1]);
a = (int) getpid();
b = atoi(argv[1]);
sprintf(buf, “[%d],[%d]\n”, a, a % b);
strsize = strlen(buf) + 1;
if (write(STDOUT_FILENO, buf, strsize) != strsize)
{
perror(“Child: write to pipe failed\n”);
exit_code = EXIT_FAILURE;
}
} // else
break;
default:
if (dup2(fd[0], STDIN_FILENO) < 0)
{
perror(“Parent: fd duplication failed\n”);
exit_code = EXIT_FAILURE;
}
else
{
close(fd[0]); 
close(fd[1]); 
if (x = wait(&status) != childpid)
{
perror(“Parent: unexpected error\n”);
}
else
{
if (status == 0)
{
if (read(STDIN_FILENO, buf, BUFSIZE) <= 0)
{
perror(“Parent: pipe read failed\n”);
exit_code = EXIT_FAILURE;
}
else
{
printf(“[%d] got: %s\n”, (int) getpid(), buf);
}
}
else
{
perror(“Parent: child had problems\n”);
exit_code = EXIT_FAILURE;
}
}
} // end if default
} // end switch
} // end if pipe
} //end if argc
exit(exit_code);
} // end main

 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

please explain this

zsh 4.3.4% cat file ACFCFACCACARCSHFARCVJVASTVAJFTVAJVGHBAJ zsh 4.3.4% cat file1 A C F R zsh 4.3.4% <file1 while read;do printf "%s=%d\n" "$REPLY" "${#$(<file)//}";done A=9 C=7 F=4 R=2 That was the previous post. But , can anybody can explain me in detail about this line zsh... (2 Replies)
Discussion started by: dummy_needhelp
2 Replies

2. Shell Programming and Scripting

Please can any one explain this ${0##/}

I did not understand what is ${0##/} PGM=${0##/} TMP=/tmp/${PGM}.$$ Please explain me. (2 Replies)
Discussion started by: gadege
2 Replies

3. Shell Programming and Scripting

please explain the below

could u please convert the below statement to shell script ---------- logdir=/smp/dyn/logfiles/cpm/pgm/pgIm $logdir = $logdir ."/pgIm${toDate}*"; ---- could u please explain the below clearly grep -i adding $logdir | grep -iv equation | awk '{print \$NF}' | sort -u | sed -e... (1 Reply)
Discussion started by: mail2sant
1 Replies

4. AIX

can anyone explain this?

this is the mksys b script.... can anyone explain .. what # and 1 in if condition this is the first line of the script... it is not from middle of the script.... if then echo "Not enough parameters, need a client name for mksysb" Usage="Usage: $0 <client name>" ... (2 Replies)
Discussion started by: honeym210
2 Replies

5. UNIX for Dummies Questions & Answers

Please explain this

if then echo "Syntax: $0 <sid> <COLD/HOT> <DEST>" exit fi if --------------what does this mean??? echo "Syntax: $0 <sid> <COLD/HOT> <DEST>"---pls explain this as well (2 Replies)
Discussion started by: appsdba.nitin
2 Replies

6. Shell Programming and Scripting

can any one explain this example

hi all i have an example i want one help me to understand cause i tried to test it but almost fail and i don't know how can i solve this problem " the main idea to read from two files and replace something from one to another " but i don't understand why it fail all time $ cat main.txt... (4 Replies)
Discussion started by: maxim42
4 Replies

7. Homework & Coursework Questions

Could anyone help explain this?

1. The problem statement, all variables and given/known data: I have a retake assignment to complete for my computer networks and OS class. This isn't really my area, had I known last year I could have swapped it for a different module I would have done so. I'm determined to get through it... (6 Replies)
Discussion started by: Squall Moogle
6 Replies

8. Shell Programming and Scripting

Explain $# please

I'm trying to follow a script and I see it begins with this: if ; then if ; then print "blah $0 blah blah " exit fi fi What does $# mean? I found out that $1 refers to the shell environment and the last argument that was entered or passed in the previous command. I couldn't find $#... (2 Replies)
Discussion started by: MaindotC
2 Replies

9. Shell Programming and Scripting

anyone can explain this?

why the case 2 will happen ? , ' should stop the history substitution ,shouldn't it? case 1 # echo "123"|sed '/123/!d' 123 case 2 # echo "123 > 456 > 1 > "|sed '/123/!d' -bash: !d': event not found case 3 # echo "123 > 456 > 12 > "|sed '/123/'\!d 123 # bash --version (1 Reply)
Discussion started by: justlooks
1 Replies

10. Shell Programming and Scripting

Can someone explain this for me?

Can someone do me a favour and explain the following for me: ((r=$RANDOM%$n+1)) I know what $RANDOM does but what is % sign and what does it do with %$n+1? (2 Replies)
Discussion started by: bashily
2 Replies
TEE(2)							     Linux Programmer's Manual							    TEE(2)

NAME
tee - duplicating pipe content SYNOPSIS
#define _GNU_SOURCE #include <fcntl.h> ssize_t tee(int fd_in, int fd_out, size_t len, unsigned int flags); DESCRIPTION
tee() duplicates up to len bytes of data from the pipe referred to by the file descriptor fd_in to the pipe referred to by the file descriptor fd_out. It does not consume the data that is duplicated from fd_in; therefore, that data can be copied by a subsequent splice(2). flags is a series of modifier flags, which share the name space with splice(2) and vmsplice(2): SPLICE_F_MOVE Currently has no effect for tee(); see splice(2). SPLICE_F_NONBLOCK Do not block on I/O; see splice(2) for further details. SPLICE_F_MORE Currently has no effect for tee(), but may be implemented in the future; see splice(2). SPLICE_F_GIFT Unused for tee(); see vmsplice(2). RETURN VALUE
Upon successful completion, tee() returns the number of bytes that were duplicated between the input and output. A return value of 0 means that there was no data to transfer, and it would not make sense to block, because there are no writers connected to the write end of the pipe referred to by fd_in. On error, tee() returns -1 and errno is set to indicate the error. ERRORS
EINVAL fd_in or fd_out does not refer to a pipe; or fd_in and fd_out refer to the same pipe. ENOMEM Out of memory. VERSIONS
The tee() system call first appeared in Linux 2.6.17. CONFORMING TO
This system call is Linux-specific. NOTES
Conceptually, tee() copies the data between the two pipes. In reality no real data copying takes place though: under the covers, tee() assigns data in the output by merely grabbing a reference to the input. EXAMPLE
The following example implements a basic tee(1) program using the tee() system call. #define _GNU_SOURCE #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <limits.h> int main(int argc, char *argv[]) { int fd; int len, slen; if (argc != 2) { fprintf(stderr, "Usage: %s <file> ", argv[0]); exit(EXIT_FAILURE); } fd = open(argv[1], O_WRONLY | O_CREAT | O_TRUNC, 0644); if (fd == -1) { perror("open"); exit(EXIT_FAILURE); } do { /* * tee stdin to stdout. */ len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); if (len < 0) { if (errno == EAGAIN) continue; perror("tee"); exit(EXIT_FAILURE); } else if (len == 0) break; /* * Consume stdin by splicing it to a file. */ while (len > 0) { slen = splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); if (slen < 0) { perror("splice"); break; } len -= slen; } } while (1); close(fd); exit(EXIT_SUCCESS); } SEE ALSO
splice(2), vmsplice(2), feature_test_macros(7) COLOPHON
This page is part of release 3.27 of the Linux man-pages project. A description of the project, and information about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/. Linux 2009-09-15 TEE(2)
All times are GMT -4. The time now is 11:01 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy