Przekazanie nazwy programu jako argument.

0

Witam,
Mam problem z pewnym zadaniem.

• Napisać funkcję, która wypisuje identyfikatory UID, GID, PID, PPID i PGID dla
aktualnego procesu oraz nazwę programu przekazaną jako argument.
• Implementacje funkcji umieścić w osobnym pliku "procinfo.c" oraz stworzyć plik
nagłówkowy "procinfo.h" z deklaracjami.
• Plik źródłowy ma zawierać tylko jedną funkcję int procinfo(const char* name),
nie ma zawierać funkcji main.

Funkcje która wypiseuje identyfikatory już mam. Nie rozumiem o co chodzi z tym przekazaniem nazwy przez argument. Napisalem coś takiego:


#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include "procinfo.h"

void procinfo(char* name)
{
  int a, b, c, d, e;
  a=getpid();
  b=getgid();
  c=getuid();
  d=getppid();
  e=getpgrp();

	printf (" pid:%i\n gid:%i\n uid:%i\n ppid:%i\n pgid:%i\n nazwa programu:%s\n", a, b, c, d, e, name);
return 0;
}

plik nagłówkowy

#ifndef _procinfo
#define _procinfo
  
void procinfo (char *nazwa_programu)

#endif

Ale nie chce się nawet kompilować.

0

?
argv[0] to nazwa programu

0

ale gdzie mam to wstawić?

0
int main(int argc, char* argv[]){
  printf("Nazwa programu to %s\n",argv[0]);
}
0

No dobrze napisałem coś takiego

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include "procinfo.h"

int main(int argc, char* argv[])
{
 printf("Nazwa programu to %s\n",argv[0]);
int procinfo(argc[0])
return 0;
}

int procinfo(char* name)
{
  int a, b, c, d, e;
  a=getpid();
  b=getgid();
  c=getuid();
  d=getppid();
  e=getpgrp();

	printf (" pid:%i\n gid:%i\n uid:%i\n ppid:%i\n pgid:%i\n nazwa programu:%s\n", a, b, c, d, e);
	return 0;

}

i wywala mi
procinfo.c: In function ‘procinfo’:
procinfo.c error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘{’ token
procinfo.c error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘{’ token
procinfo.c error: expected ‘{’ at end of input

1
 
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int procinfo(char* name);
 
int main(int argc, char* argv[])
{
 printf("Nazwa programu to %s\n", argv[0]);
 procinfo(argv[0]);

 return 0;
}
 
int procinfo(char* name)
{
  int a, b, c, d, e;
  a=getpid();
  b=getgid();
  c=getuid();
  d=getppid();
  e=getpgrp();
  printf (" pid:%d\n gid:%d\n uid:%d\n ppid:%d\n pgid:%d\n nazwa programu:%s\n", a, b, c, d, e, name);

  return 0;
}
  1. Czytaj co woła Ci kompilator.
  2. Przekazujesz jako argument argv[0], nie argc[0]. argc jest zmienną typu całkowitego przechowującą ilość argumentów.
  3. Wywołanie funkcji ma postać: "funkcja()", a nie "int funkcja()".
  4. Za mało argumentów do printf dałeś (zapomniałeś o name).
  5. Do wyświetlania liczb całkowitych w ramach printf stosuje się %d.

Pozdrawiam

0

Mój program musi mieć plik nagłówkowy (procinfo.h)
wygląda on tak:

#ifndef _procinfo
#define _procinfo
  
void procinfo(char *name)

#endif 

źródło

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include "procinfo.h"

int main(int argc, char* argv[])
{
  procinfo(argv[1]);
}

void procinfo(char* name)
{
  int a, b, c, d, e;
  a=getpid();
  b=getgid();
  c=getuid();
  d=getppid();
  e=getpgrp();

	printf (" pid:%d\n gid:%d\n uid:%d\n ppid:%d\n pgid:%d\n nazwa programu:%s\n", a, b, c, d, e, name);
} 

I ciągle wywala mi
[Patryk@localhost procinfo]$ gcc procinfo.c -c -o procinfo.o
procinfo.c: In function ‘procinfo’:
procinfo.c error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘{’ token
procinfo.c error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘{’ token
procinfo.c error: expected ‘{’ at end of input
Gdy wywalę linie #include "procinfo.h" wszystko jest ok, ale ja muszę mnieć ten nieszczęśliwy plik nagłówkowy.

0

Brakuje Ci średnika na końcu deklaracji funkcji w pliku nagłówkowym.

0

No ja pier... rzeczywiście. Dzięki teraz działa :)

0

Jeszcze takie pytanie na marginesie.
Jeśli będę chciał użyć funkcji void procinfo(char* name) w innym programie, to co muszę do niego dołączyć?

0

funkcję musisz zdefiniować w oddzielnym pliku nagłówkowym, a w programie dołączyć plik poprzez #include "nazwa.h"

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