The UNIX and Linux Forums  

Go Back   The UNIX and Linux Forums > Operating Systems > Linux
.
google unix.com



Linux RedHat, Ubuntu, SUSE, Fedora, Debian, Mandriva, Slackware, Gentoo linux, PCLinuxOS. All Linux questions here!

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Install Guide: Oracle Database 11g Release 1 on Oracle Enterprise Linux 5 iBot Oracle Updates (RSS) 0 04-06-2008 05:10 AM
Upgrade Guide: Moving to Oracle RAC 11g on Oracle Enterprise Linux iBot Oracle Updates (RSS) 0 04-06-2008 05:10 AM
Build Your Own Oracle RAC Cluster on Oracle Enterprise Linux and iSCSI iBot Oracle Updates (RSS) 0 04-06-2008 05:10 AM
Install Oracle RAC 10g on Oracle Enterprise Linux using VMware Server iBot Oracle Updates (RSS) 0 04-06-2008 05:10 AM
Oracle(R) University Launches Enterprise Linux Training and ... - CNNMoney.com iBot UNIX and Linux RSS News 0 11-14-2007 09:00 AM

Reply
 
Submit Tools LinkBack Thread Tools Search this Thread Rate Thread Display Modes
  #1 (permalink)  
Old 03-07-2008
Registered User
 

Join Date: Oct 2007
Posts: 4
vgscan produces no output using file descriptors on Oracle Enterprise Linux.

I wrote a simple program which will create a child process to execute a command and the output will be redirected to the file.

Please have a look at the following code ->

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <fcntl.h>

void execute(char **argv)
{
pid_t pid;
int status;

int fStdOutDesc = open("/tmp/outfile", O_CREAT | O_RDWR, S_IREAD | S_IWRITE);
int fStdErrDesc = open("/tmp/errfile", O_CREAT | O_RDWR, S_IREAD | S_IWRITE);

printf("Out file Desc dup2 is %d\n",fStdOutDesc);
printf("Err file Desc dup2 is %d\n",fStdErrDesc);

if ((pid = fork()) < 0) /* fork a child process */
{
printf("ERROR: forking child process failed...\n");
exit(1);
}

else if (pid == 0) /* for the child process: */
{
dup2(fStdOutDesc, fileno(stdout));
dup2(fStdErrDesc, fileno(stderr));

if (execvp(*argv, argv) < 0) /* execute the command */
{
printf("ERROR: exec failed...\n");
exit(1);
}
}
else /* for the parent process: */
{
while (wait(&status) != pid) ; /* wait for completion */
}
}

int main(void)
{
char cmd[1024];
char *argv[64];

printf("Enter the Command : ");
scanf("%s",&cmd); /* works for ls & doesn’t work for vgscan */
printf("\n");
argv[0]=cmd;
argv[1]='\0';
execute(argv);
return 0;
}

After running above program, it will prompt for an input (command), if you enter “ls”, the output of the “ls” command is redirected to /tmp/outfile, whereas after entering vgscan, there will not be anything in either /tmp/outfile or /tmp/errfile.

This problem is particularly with few commands like vgscan, pvscan, vgdisplay, lvdisplay etc whereas these commands give output if ran through shell.

This is the case for only Oracle Enterprise Linux. The same program works fine on other Linux versions.

Any help regarding this would be very much helpful.
Reply With Quote
Google The UNIX and Linux Forums
Sponsored Links
Reply

Bookmarks

Tags
None

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes Rate This Thread
Rate This Thread:




All times are GMT -4. The time now is 11:30 AM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited.
vBCredits v1.4 Copyright ©2007 - 2008, PixelFX Studios
The UNIX and Linux Forums Content Copyright ©1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant URLs by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66