The UNIX and Linux Forums  

Go Back   The UNIX and Linux Forums > Top Forums > High Level Programming
Google UNIX.COM


High Level Programming Post questions about C, C++, Java, SQL, and other programming languages here.

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
c system call rangaswamy High Level Programming 1 02-19-2008 10:53 AM
System hanged. help required. praveen_b744 UNIX for Advanced & Expert Users 8 09-20-2007 06:03 PM
how to differentiate system call from library call muru UNIX for Advanced & Expert Users 2 07-19-2007 08:20 PM
system() function call... Vishnu High Level Programming 1 10-15-2002 08:36 AM
URGENT Help required regarding the use of FORK system call kkumar1975 UNIX for Advanced & Expert Users 4 10-08-2001 02:33 PM

Reply
 
Submit Tools LinkBack Thread Tools Search this Thread Display Modes
  #1  
Old 03-18-2008
Registered User
 

Join Date: Dec 2007
Location: TamilNadu,INDIA
Posts: 48
Red face Help required with using system() call

Hi,

I try to write a C program which lists the output of a paticular command with all the available options (a to z) for the command in the directory of execution.

This program will generate the output if the option exists for the particular command else it will display some message saying "Option not available for the command".

ex: ls command has option "l" but not a option "y".
It will display the output on ls -l execution and error message on ls -y execution.

I am passing the "command to be executed(ex:ls,more)" in the command line argument. With in the program, I am using a while loop which initiated with 'a' and runs up to 'z'. I am using the "system()" unix call for the execution of command. please find my program below:

Code:
# include <stdio.h>
# include <stdlib.h>
# include <strings.h>

main(argc,argv)
int argc;
char *argv[];
{
    int i;
    printf("%d is arg\nc",argc);
    printf("arg0 is %s\n",argv[0]);
    printf("arg1 is %s\n",argv[1]);

    if(argc!=2)
    {
        printf("usage Wrong");
        exit(0);
    }

    printf("The command you ahve entered is %s\n",argv[1]);
    printf("Let us display the various outputs for different options for the command");

    i='a';
    while(i>='a'&& i<='z')
    {
        printf("\n option is %d ASCII is %c",i,i);
        system("cat > /tmp/cmd_opt.sh << EOF
                                         echo cmd is $1
                                         echo opt is $2
                                         $1 -$2
                                         EOF ");
        system("sh /tmp/cmd_opt.sh argv[1] i");
        i++;
    }

}



on compiling the program with cc, its giving a warning message "multi-line string literals are deprecated"

But however on execution of the program, the output is as follows:

Code:
[ramki@lindesk3 ramki]$ cc options_wth_exe_cmds.c -o cmd_opt
options_wth_exe_cmds.c:28:16: warning: multi-line string literals are deprecated
[ramki@lindesk3 ramki]$ ./cmd_opt ls
2 is arg
carg0 is ./cmd_opt
arg1 is ls
The command you ahve entered is ls
Let us display the various outputs for different options for the command
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 97 ASCII is a
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 98 ASCII is b
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 99 ASCII is c
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 100 ASCII is d
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 101 ASCII is e
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 102 ASCII is f
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 103 ASCII is g
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 104 ASCII is h
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 105 ASCII is i
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 106 ASCII is j
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 107 ASCII is k
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 108 ASCII is l
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 109 ASCII is m
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 110 ASCII is n
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 111 ASCII is o
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 112 ASCII is p
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 113 ASCII is q
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 114 ASCII is r
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 115 ASCII is s
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 116 ASCII is t
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 117 ASCII is u
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 118 ASCII is v
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 119 ASCII is w
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 120 ASCII is x
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 121 ASCII is y
cmd is
opt is
/tmp/cmd_opt.sh: line 3: -: command not found
/tmp/cmd_opt.sh: line 4: EOF: command not found
 option is 122 ASCII is z[ramki@lindesk3 ramki]$



Please help me in this..

Thanks,
Ramkrix.

Last edited by Yogesh Sawant; 03-18-2008 at 05:03 AM. Reason: added code tags
Reply With Quote
Forum Sponsor
  #2  
Old 03-18-2008
...@...
 

Join Date: Feb 2004
Location: NM
Posts: 4,298
You are going to have to write your multi-line command into a file, chmod the file to set the execute bit, then call system("./filename.sh");
Reply With Quote
  #3  
Old 03-18-2008
era
Guest
 

Posts: n/a
Why are you using C for this in the first place? Sounds like a shell script would be better.
Reply With Quote
  #4  
Old 03-18-2008
Registered User
 

Join Date: Oct 2007
Location: USA
Posts: 567
Most UNIX commands take alphanumeric characters as command line options. ls takes both uppercase/lowercase letters of the alphabet as well as numbers as command line options. So testing for i between 'a' and 'z' is too exclusive. It should take into account uppercase alphabets and numbers ranging from 0 - 9 as well.
Reply With Quote
  #5  
Old 03-20-2008
Registered User
 

Join Date: Dec 2007
Location: TamilNadu,INDIA
Posts: 48
Quote:
Originally Posted by era View Post
Why are you using C for this in the first place? Sounds like a shell script would be better.
Ya I knew I cud do it simply by using a shell script. But the requirement is to be done with an C program and hence I did with C
Reply With Quote
  #6  
Old 03-20-2008
Registered User
 

Join Date: Dec 2007
Location: TamilNadu,INDIA
Posts: 48
Red face

Quote:
Originally Posted by jim mcnamara View Post
You are going to have to write your multi-line command into a file, chmod the file to set the execute bit, then call system("./filename.sh");
Hi Now, I have changed the source code as follows by putting that multiple literals in the system() earlier to an shellscript ./filename.sh now.

But I have confusion how to pass my argv[1] and the value of i as argument to the shell script. To ask simple: How system() call recognize the command line args passed to an C program.

SOURCE CODE:

# include <stdio.h>
# include <stdlib.h>
# include <strings.h>

main(argc,argv)
int argc;
char *argv[];
{
int i;
/*char *cmd,*opt;*/
printf("%d is arg\nc",argc);
printf("arg0 is %s\n",argv[0]);
printf("arg1 is %s\n",argv[1]);

if(argc!=2)
{
printf("usage Wrong");
exit(0);
}

printf("The command you ahve entered is %s\n",argv[1]);
printf("Let us display the various outputs for different options for the command");

i='a';
while(i>='a'&& i<='z')
{
printf("\n option is %d ASCII is %c",i,i);
system("./filename.sh argv[1] i");
i++;
}

}


OUTPUT:

[ramki@lindesk3 ramki]$ cc options_wth_exe_cmds.c -o cmd_opt
[ramki@lindesk3 ramki]$ ./cmd_opt ls
2 is arg
carg0 is ./cmd_opt
arg1 is ls
The command you ahve entered is ls
Let us display the various outputs for different options for the command
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found
option is 97 ASCII is a
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found
option is 98 ASCII is b
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found
option is 99 ASCII is c
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found
option is 100 ASCII is d
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found
option is 101 ASCII is e
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found
option is 102 ASCII is f
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found
option is 103 ASCII is g
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found
option is 104 ASCII is h
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found
option is 105 ASCII is i
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found
option is 106 ASCII is j
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found
option is 107 ASCII is k
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found
option is 108 ASCII is l
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found
option is 109 ASCII is m
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found
option is 110 ASCII is n
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found
option is 111 ASCII is o
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found
option is 112 ASCII is p
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found
option is 113 ASCII is q
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found
option is 114 ASCII is r
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found
option is 115 ASCII is s
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found
option is 116 ASCII is t
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found
option is 117 ASCII is u
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found
option is 118 ASCII is v
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found
option is 119 ASCII is w
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found
option is 120 ASCII is x
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found
option is 121 ASCII is y
cmd is argv[1]
opt is i
./filename.sh: line 3: argv[1]: command not found


Please help me in get rid of these..
Reply With Quote
  #7  
Old 03-20-2008
Moderator
 

Join Date: Dec 2003
Location: /dev/fl
Posts: 1,059
Quote:
system("./filename.sh argv[1] i");
You are always passing the string "./filename.sh argv[1] i". You need to modify your code to pass the actual values of argv[1] and i.
Reply With Quote
Google The UNIX and Linux Forums
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes




All times are GMT -7. The time now is 12:52 PM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited.
The UNIX and Linux Forums Content Copyright ©1993-2008. All Rights Reserved.Ad Management by RedTyger Visit The Complex Event Processing Blog

Content Relevant URLs by vBSEO 3.2.0