Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 830899
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 15, 20262026-05-15T04:07:08+00:00 2026-05-15T04:07:08+00:00

I have a project for a course, I did almost everything but I have

  • 0

I have a project for a course, I did almost everything but I have this error.

the project about doing our own shell some of them we have to write our code, others we will use the fork method..

this is the code,

#include <sys/wait.h>
#include <dirent.h>
#include <limits.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include<stdio.h>
#include<fcntl.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>

int main(int argc, char **argv)
{
    pid_t pid;
    char str[21], *arg[10];
    int x,status,number;   
    system("clear");
    while(1)
    {

        printf("Rshell>" );
        fgets(str,21,stdin);
        x = 0;
        arg[x] = strtok(str, " \n\t");
        while(arg[x])
        arg[++x] = strtok(NULL, " \n\t");
        if(NULL!=arg[0])
        {

            if(strcasecmp(arg[0],"cat")==0) //done
            {
                int f=0,n;
                    char l[1];
                    struct stat s;
                    if(x!=2)
                    {
                            printf("Mismatch argument\n");


                    } 
                    /*if(access(arg[1],F_OK))
                {
                        printf("File Exist");
                        exit(1);
                    }
                   if(stat(arg[1],&s)<0)
                   {
                       printf("Stat ERROR");
                       exit(1);
                   }
                   if(S_ISREG(s.st_mode)<0)
                   {
                       printf("Not a Regular FILE");
                       exit(1);
                   }
                   if(geteuid()==s.st_uid)
                       if(s.st_mode & S_IRUSR)
                           f=1;
                   else if(getegid()==s.st_gid)
                       if(s.st_mode & S_IRGRP)
                           f=1;
                   else if(s.st_mode & S_IROTH)
                       f=1;
                   if(!f)
                   {
                       printf("Permission denied");
                       exit(1);
                   }*/
                       f=open(arg[1],O_RDONLY);
                   while((n=read(f,l,1))>0)
                       write(1,l,n);

            }
            else if(strcasecmp(arg[0],"rm")==0) //done
            {
                if( unlink( arg[1] ) != 0 )
                    perror( "Error deleting file" );
                else
                puts( "File successfully deleted" );

            }
            else if(strcasecmp(arg[0],"rmdir")==0) //done
            {
                if( remove( arg[1] ) != 0 )
                    perror( "Error deleting Directory" );
                else
                puts( "Directory successfully deleted" );

            }
            else if(strcasecmp(arg[0],"ls")==0) //done
            {

                DIR *dir;
                struct dirent *dirent;
                char *where = NULL;
                //printf("x== %i\n",x);
                //printf("x== %s\n",arg[1]);
                //printf("x== %i\n",get_current_dir_name());
                if (x == 1) 
                where = get_current_dir_name();
                else where = arg[1];

                if (NULL == (dir = opendir(where))) {
                    fprintf(stderr,"%d (%s) opendir %s failed\n", errno, strerror(errno), where);
                    return 2;
                }

                while (NULL != (dirent = readdir(dir))) {
                    printf("%s\n", dirent->d_name);
                }

                closedir(dir);

            }
            else if(strcasecmp(arg[0],"cp")==0) //not yet for Raed
            {
                FILE *from, *to;
                char ch;


                if(argc!=3) {
                printf("Usage: copy <source> <destination>\n");
                 exit(1);
                }

                 /* open source file */
                if((from = fopen(argv[1], "rb"))==NULL) {
                        printf("Cannot open source file.\n");
                        exit(1);
                }

                 /* open destination file */
                if((to = fopen(argv[2], "wb"))==NULL) {
                        printf("Cannot open destination file.\n");
                     exit(1);
                }

                /* copy the file */
                 while(!feof(from)) {
                    ch = fgetc(from);
                    if(ferror(from)) 
                    {
                        printf("Error reading source file.\n");
                            exit(1);
                    }
                    if(!feof(from)) fputc(ch, to);
                        if(ferror(to)) {
                             printf("Error writing destination file.\n");
                             exit(1);
                    }
                 }

                if(fclose(from)==EOF) {
                     printf("Error closing source file.\n");
                     exit(1);
                 }

                 if(fclose(to)==EOF) {
                     printf("Error closing destination file.\n");
                     exit(1);
                 }

            }
            else if(strcasecmp(arg[0],"mv")==0)//done
            {
                if( rename(arg[1],arg[2]) != 0 )
                    perror( "Error moving file" );
                else
                puts( "File successfully moved" );

            }
            else if(strcasecmp(arg[0],"hi")==0)//done
            {

                printf("hello\n");
            }
            else if(strcasecmp(arg[0],"exit")==0) // done
            {

                return 0;

            }
            else if(strcasecmp(arg[0],"sleep")==0) // done 
            {

                if(x==1)
                printf("plz enter the # seconds to sleep\n");
                else
                sleep(atoi(arg[1]));
            }
            else if(strcmp(arg[0],"history")==0) // not done 
            {
                FILE *infile;
                //char fname[40];
                char line[100];
                int lcount;
                ///* Read in the filename */
                //printf("Enter the name of a ascii file: ");
                //fgets(History.txt, sizeof(fname), stdin);

                /* Open the file.  If NULL is returned there was an error */
                if((infile = fopen("History.txt", "r")) == NULL) 
                {
                        printf("Error Opening File.\n");
                        exit(1);
                }

                while( fgets(line, sizeof(line), infile) != NULL ) {
                    /* Get each line from the infile */
                        lcount++;
                        /* print the line number and data */
                        printf("Line %d: %s", lcount, line);  
                }

                fclose(infile);  /* Close the file */
                writeHistory(arg);
                //write to txt file every new executed command
                //read from the file once the history command been called
                //if a command called not for the first time then just replace it to the end of the file
            }
            else if(strncmp(arg[0],"@",1)==0) // not done 
            {
                //scripting files
                // read from the file command by command and executing them
            }
            else if(strcmp(arg[0],"type")==0) //not done 
            {

                //if(x==1)
                //printf("plz enter the argument\n");
                //else
                //type((arg[1]));
            }
            else
            {

                pid = fork( );

                if (pid == 0)
                {
                    execlp(arg[0], arg[0], arg[1], arg[2], NULL);
                    printf ("EXEC Failed\n");
                }
                else
                {

                    wait(&status);
                    if(strcmp(arg[0],"clear")!=0)
                    {   
                        printf("status %04X\n",status);
                        if(WIFEXITED(status))
                            printf("Normal termination, exit code %d\n", WEXITSTATUS(status));
                        else
                            printf("Abnormal termination\n");
                    }
                }

            }

        }
    }
}
void writeHistory(char *arg[]) 
{
    FILE *file; 
    file = fopen("History.txt","a+"); /* apend file (add text to 
    a file or create a file if it does not exist.*/ 
    int i =0;
    while(strcasecmp(arg[0],NULL)==0)
    {
        fprintf(file,"%s ",arg[i]); /*writes*/ 
    }
    fprintf(file,"\n"); /*new line*/ 
    fclose(file); /*done!*/ 
    getchar(); /* pause and wait for key */ 
    //return 0; 
}

the thing is when I compile the code, this what it gives me

/home/ugics/st255375/ICS431Labs/Project/Rshell.c: At top level:
/home/ugics/st255375/ICS431Labs/Project/Rshell.c:264: warning: conflicting types for ‘writeHistory’
/home/ugics/st255375/ICS431Labs/Project/Rshell.c:217: note: previous implicit declaration of ‘writeHistory’ was here
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-15T04:07:09+00:00Added an answer on May 15, 2026 at 4:07 am

    First, your WriteHistory call is expecting an array of pointers, but you’re only passing in a single char pointer variable to it.

    You’re getting an odd message because you aren’t declaring the function prior to using it, so when it gets to the definition of WriteHistory, it doesn’t match the call that you’re making earlier.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

i have a course project to do on network security, the project theme is
I have a project that I'm currently working on but it currently only supports
I have been trying to get around this error for a day now and
So I had this project where at first I did a git add .
I have over the course of a few projects developed a pattern for creating
I have project that I'm working on that is going to require a webserver.
I have project Emle in Launchpad . I set it to import from emle.svn.sourceforge.net
I have a project that I would like to start beta testing soon, it
I have a project where I would like to generate a report export in
I have C++ project (VS2005) which includes header file with version number in #define

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.