Help required with using system() call


 
Thread Tools Search this Thread
Top Forums Programming Help required with using system() call
# 1  
Old 03-18-2008
Power 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 09:03 AM.. Reason: added code tags
# 2  
Old 03-18-2008
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");
# 3  
Old 03-18-2008
Why are you using C for this in the first place? Sounds like a shell script would be better.
era
# 4  
Old 03-18-2008
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.
# 5  
Old 03-20-2008
Quote:
Originally Posted by era
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
# 6  
Old 03-20-2008
Power

Quote:
Originally Posted by jim mcnamara
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..
# 7  
Old 03-20-2008
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.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

system call

Trying to figure out a load issue with a webserver. I have traced a php script and noticed the following connect(4, {sa_family=AF_INET, sin_port=htons(3306), sin_addr=inet_addr("XX.XX.XX.XX")}, 16) = -1 EINPROGRESS (Operation now in progress) <0.000035> poll(, 1, 2000) = 1 () <0.000120>... (5 Replies)
Discussion started by: rajan007
5 Replies

2. Programming

need help with system call

hi everyone i wrote a system call and compiled the kernel succesfully... my system call is in a file in the kernel folder named my_syscall1.c (kernel/my_syscall1.c) the header file for this system call i added it in the folder include like this include/my_syscall1/my_syscall1.h my problem is... (2 Replies)
Discussion started by: demis87
2 Replies

3. Programming

system call

I have a cgi script which is called after certain time interval, which has this: system ("ls -l /tmp/cgic* | grep -v \"cgicsave.env\" | awk '{print $5}'"); During the execution of this script,the output is 0 sometimes. But due to this the system call is not working at all and doesnt o/p... (2 Replies)
Discussion started by: xs2punit
2 Replies

4. UNIX for Advanced & Expert Users

ftok system call

In the system call msgget(key,mode) for the argument key i want to use ftok call . I am really confused with the argument pathname in ftok call. I want to know the pathname of which file I want to specify over there. I am just a beginer to advanced unix plz help me out. (1 Reply)
Discussion started by: jimmyuk
1 Replies

5. Programming

C:system call

Hi I'm studing the system call. I've written a small program that return the time spent in doing some operations. Now I'd like to write one that return the time spent in user mode of a process. I'm reading that i should use the tms struct: clock_t times(struct tms *buf); struct tms {... (2 Replies)
Discussion started by: Dedalus
2 Replies

6. Shell Programming and Scripting

system call

Hi, How to write a system calls in a script ? > cd $HOME > ls -ltr thanks in advance.. (10 Replies)
Discussion started by: hegdeshashi
10 Replies

7. Programming

c system call

How the c compiler differentiates the system calls and function calls? (1 Reply)
Discussion started by: rangaswamy
1 Replies

8. UNIX for Advanced & Expert Users

System hanged. help required.

HI, I have a Fedora running box. I am not able to ping/login. I guess it got hanged. Can any one help me how to login to that box with out restart? (8 Replies)
Discussion started by: praveen_b744
8 Replies

9. UNIX for Advanced & Expert Users

how to differentiate system call from library call

Hi, Ho do I differentiate system call from library call? for example if I am using chmod , how do I find out if it is a system call or library call? Thanks Muru (2 Replies)
Discussion started by: muru
2 Replies

10. UNIX for Advanced & Expert Users

URGENT Help required regarding the use of FORK system call

I desperately wanted one of the UNIX Gurus to help me resolve my problem asap(I have to deliver the code to the client by Monday 08-oct). I have a file with around 5 million records (50 lakhs). Now my original process was taking around 30 hours to read the complete file, process each and every... (4 Replies)
Discussion started by: kkumar1975
4 Replies
Login or Register to Ask a Question