Shell Program


 
Thread Tools Search this Thread
Top Forums Programming Shell Program
# 1  
Old 03-11-2005
Shell Program

I am programming the following simple shell program. It works for the most part, things like 'ls' and 'ps' work just fine. However when I add options, (example, ls -l) it does not execute the command. Also, I've been trying to add an "exit" command, so that I don't have to use the iterrupt; but every time I try..' if (buf == "exit") exit(0) ' in the child it doesn't seem to read the array for some reason. Any suggestions?

Thanks
Code:
#include        <sys/types.h>
#include        <sys/wait.h>
#include        <signal.h>
#include        <stdio.h>
#include        <stdlib.h>

static void     sig_int(int);           /*signal-catching function */
int MAXLINE = 4096;

int
main(void)
{
        char    buf[MAXLINE];
        pid_t   pid;
        int             status;

        if (signal(SIGINT, sig_int) == SIG_ERR)
                printf("signal error");

        printf("shell%% ");  /* print prompt */

        while (fgets(buf, MAXLINE, stdin) != NULL) {
                buf[strlen(buf) - 1] = 0;       /* replace newline with null */

                if ( (pid = fork()) < 0)
                        printf("fork error");

                else if (pid == 0) { /*child*/
                        execlp(buf, buf, (char *) 0);
                        printf("couldn't execute: %s", buf);
                        exit(127);
                }

                /* parent */
                if ( (pid = waitpid(pid, &status, 0)) < 0)
                        printf("waitpid error");
                printf("shell%% ");
        }
        exit(0);
}

void
sig_int(int signo)
{
        printf("interrupt\n");


Last edited by Perderabo; 03-11-2005 at 09:11 PM.. Reason: Add code tags for readability
# 2  
Old 03-11-2005
For one thing: if (buf == "exit")
is not useful. You can't compare a string like that. See "man strcmp".
# 3  
Old 03-12-2005
Quote:
Originally Posted by Perderabo
For one thing: if (buf == "exit")
is not useful. You can't compare a string like that. See "man strcmp".
Thanks, that is actually what I used, what I didn't realize was that the return value 0 is true, so my if statement wasn't working correctly. I am relatively new to fork() and the exec commands, which is why I am playing with this. My problem with the options still remains, and I can't seem to figure out why. ls works just fine, but ls -l doesn't execute at all.
# 4  
Old 03-12-2005
Well you're not very close to anything that will work right. execlp doesn't work like that. A correct call would be more like:
execlp ("ls", "ls", "-l", (char *)0)
but this would be used if happened to know that that want to invoke ls -l. You could also get it to work if you're willing to support a single argument. But a shell must really support a variable number of arguments. So you will need something more like....

char *cmd[] = { "ls", "-l", (char *)0 };
execvp ("ls", cmd);

except that you must parse the command line from the user and build the cmd array dynamically. Considering that you're having trouble comparing two strings, this may be more than you're ready for at present. You need to walk before you can run.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Homework & Coursework Questions

C shell program

1. I've have to write a shell program that accepts Ctrl+T (in linux os in c language) and should print out the current time and date to the screen. I've written the following code but i've to type ^T individual rather than pressing ctrl+T(^T) to get the output. : 2. How do i make the shell... (2 Replies)
Discussion started by: zorro_phu
2 Replies

2. Homework & Coursework Questions

Shell program in C

Hi all, I have an assignment from school to write a shell program in linux. the idea is to exercise fork() and execv() functions.. the shell program is supposed to be the master and every command that the user prints will run in a new process. we also need to try running the command in every... (1 Reply)
Discussion started by: r3vive
1 Replies

3. Shell Programming and Scripting

Shell Program , need help!!

Hi all, I am trying to get a file from an ftp server and i have the list of files which needs to be get from the ftp server. grep unix_prg*.* log.txt > log1.txt log1.txt (which has the list of files) 06-29-09 00:00AM 3550258 unix_prg090629 06-28-09 07:00PM ... (7 Replies)
Discussion started by: raghav1982
7 Replies

4. Shell Programming and Scripting

shell program

Iam having file 1 as wc -l file1 is 8 QWEERTYUU|7927836357398398398913 yuyuyu uyiuyuyuyuy yuiyuiyuyuyy FDHGFSHAJK|1476887897877777777771 iopwiiwpoi e . . . . I Need to read the abouve line in file1 so iam using the command as tail -n 8... (8 Replies)
Discussion started by: nivas
8 Replies

5. Shell Programming and Scripting

help with shell program

I want to print the value of variables a1, a2, a3 in for loop in the following program: a1=this a2=is a3=printed for((i=1;i<4;i++)) do var=a$i #w=`echo $var` e=${var} echo $e done But actually I get a1,a2,a3 as the output not the "this is printed" So the main question is if I... (3 Replies)
Discussion started by: adgarg
3 Replies

6. Shell Programming and Scripting

very first shell program.

in the beginners book i have it gives an exercise to try. saying to make a script that examines the time. it should keep examining every second or so and say some sort of message. Can anyone help me get going. Thanks (3 Replies)
Discussion started by: bebop1111116
3 Replies

7. Shell Programming and Scripting

shell program

hello, i have problem in awk filter in shell to concatenate two string plz send me a solution as soon as possible from jyoti ardeshana (4 Replies)
Discussion started by: jyotiardeshana
4 Replies

8. Shell Programming and Scripting

shell program

How to write a shell script which takes 3 strings as positional parameters,first and second are file names and third is a directory.if the two files exist in `pwd` and they contain a specific pattern and their size is greater than 32 bytes,moves these files into directory? (1 Reply)
Discussion started by: rameshparsa
1 Replies

9. Shell Programming and Scripting

C shell Program

Hellow every body I am trying to write a very simple script in an executable file as following if ($?PWD) then echo "OK" else echo "No" endif but I am getting error during execution in c shell as synthax error at line 4 , unexpected end of file Please advise (2 Replies)
Discussion started by: Reza Nazarian
2 Replies

10. Shell Programming and Scripting

Help me with this Shell Program

Now, am in a very tight situation here. I really dont expect anyone to understand but please, try your best. am trying to right a program that goes back to the previous entry to correct a mistake. heres what am trying to do. i write a program like this Name : James Holgston... (1 Reply)
Discussion started by: TRUEST
1 Replies
Login or Register to Ask a Question