1. Jest błąd w składni funkcji
main
. Ponadto zmienna
i
jest niezadeklarowana oraz dla
i=argc
przekroczony jest zakres
argv
. Powinno być tak:
Kod: Zaznacz cały
int main( int argc, char* argv[] )
{
int i;
for( i = argc-1; i > 0; --i )
printf( "%d %s
", i, argv[i] );
}
Ten program przyjmuje dowolną liczbę argumentów z linii poleceń i wypisuje je ponumerowane w konsoli, zaczynając od ostatniego, a wyłączając zerowy (którym zawsze jest nazwa programu).
2. Używasz funkcji, ale nie dołączasz potrzebnych plików nagłówkowych. Znów zły format funkcji
main
.
nr
powinien być typu
int
, a
c
nie jest zadeklarowane.
fork
nie przyjmuje argumentów. Porównanie ma wyższy priorytet od przypisania, więc wewnątrz warunku
if
zmienna
nr
nie przyjmie jako wartości tego, co zwróci
fork()
, tylko wynik porównania
fork()>0
. Na końcu listy parametrów funkcji
execl
należy umieścić
(char*) NULL
.
Jest też błąd merytoryczny. Procesem macierzystym będzie ten, w którym
fork()
zwróci dodatnią liczbę - będzie ona oznaczała identyfikator utworzonego procesu.
Poprawiony kod:
Kod: Zaznacz cały
#include <stdio.h>
#include <unistd.h>
int main()
{
char c[256];
gets( c );
int nr;
if( ( nr = fork() ) > 0 )
{
printf( "macierzysty, %d
", nr );
}
else
{
printf( "potomny
" );
execl( "/bin/sh", "sh", c, (char*) NULL );
}
return 0;
}