int argc, char* argv[], język C

0

Miałem kawałek kodu

 
int main(int argc, char* argv[])
{
kod
}

I ten kawałek kodu przeniosłem do funkcji, ale jest problem przy kompilacji. Dostaje taki komunikat:

A NULL argv[0] was passed through an exec system call.

Zdaje sobie sprawę, że zrobiłem błąd związany z argc i argv, ale go nie rozumiem.

Jeśli dobrze rozumiem to argc i argv są odpowiedzialne za to jak to co wpisze w konsoli zostanie przekazane do maina. Nie mam natomiast pojęcia jak w tej sytuacji przekierować to do funkcji. Jest to możliwe?

0

podaj cały kod

0
 
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/stat.h>
char *wskazNaPodziel[5];

void klient(){
    FILE *fps;
    FILE *fpk;
    char string[100];


    while(1){
        fpk = fopen("my_fifo_K", "w");
        fps = fopen("my_fifo_S", "r");
        fprintf(stdout, "Komenda: ");
        scanf("%s", string);
        //fgets(string, 100, fp);
        fputs(string, fpk);
        
        printf("Otrzymalem: %s\n\n", string);
        fclose(fpk);
        fclose(fps);
    }
}

int serwer(){
    FILE *fps;
    FILE *fpk;
    char string[100];
    char podziel[5][20];
    int dlugosc, parametry=0;
    int wiersz=0;
    int kolumna=0;
    int i=0;

    while(1){
        fpk = fopen("my_fifo_K", "r");
        fps = fopen("my_fifo_S", "w");
        fgets(string, 100, fpk);
        dlugosc = strlen(string);
        for (  i=0; i<dlugosc; i++){
            if (string[i] != ' ' && string[i] != '\n'){      //wstawianie komendy lub parametrow do tablicy
                podziel[wiersz][kolumna]=string[i];
                kolumna++;
            }else if (string[i]=='\n'){                 //wykrywanie końca komendy
                parametry++;
            }else if(string[i] == ' '){                //wykrywanie przerw
                podziel[wiersz][kolumna]='\0';
                wiersz++;
                kolumna=0;
                parametry++;
            }
        }
    for ( i=0; i<parametry; i++ ){
        wskazNaPodziel[i] = podziel[i];
    }
    printf("Test: \n");
    execvp(podziel[0],wskazNaPodziel);
    
    fprintf(stdout, "ok: ");

    fclose(fpk);
    fclose(fps);
    sleep(1);
    return 0;
    }
}

int main(){

    umask(0);
    mkfifo("my_fifo_K", 0666);
    mkfifo("my_fifo_S", 0666);
    if(fork()){
        serwer();
    }else{
        klient();
    }

    return 0;
}

1
void foo(const char *progName)
  {
  }

int main(int argc,char* argv[])
  {
   foo(argv[0]);
   return 0;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1