Podpowiedź do Makefile:
calc: Watek.o
gcc -o calc Watek.o -lpthread
Watek.o : Watek.c
gcc -c Watek.c -lpthread
calc: klient.cpp
g++ , klient.cpp -o calc -pthread
* * *
all: calc prog
CFLAGS = -g
prog : nazwa.o
gcc $(CFLAGS) -o prog nazwa.o
nazwa.o : nazwa.c
gcc $(CFLAGS) -c nazwa.c
calc: Glowny.o min.o max.o
gcc $(CFLAGS) -o calc Glowny.o min.o max.o
Glowny.o : Glowny.c min.h max.h
gcc $(CFLAGS) -c Glowny.c
min.o : min.c min.h
gcc $(CFLAGS) -c min.c
max.o : max.c max.h
gcc $(CFLAGS) -c max.c
clean:
rm Glowny.o min.o max.o
Program #1:
Proces główny tworzy w pętli n nowych procesów. Każdy losuje liczbę u, zasypia i wreszcie zwraca kod równy wartości u. Proces główny czeka na zakończenie wszystkich procesów potomnych.
int main(int argc, char* argv[])
{
if(argc!=2)
printf("Jescze raz:q\n"); return -1;
}
int n;
n=atoi(argv[1]); //liczba argumentów
int i, z, st, in;
unsigned int u;
pid_t p[n];
for(i=0; i<n; i++)
in=p[i]=fork();
if(in==0) //jeśli p[i] == 0, czyli proces nie jest rodziem...
srand( getpid() );
u=(rand()%20)+1;
printf("Zasnalem...\n");
sleep(u);
printf("\nObudzilem sie...");
exit(u);
if(in>0) //jeśli jest
z=wait(&st);
printf("\nProces o ID %d zakończył się jako %d. po %d sek.\n", z, i+1, WEXITSTATUS(st));
return 0;
Program #2:
Proces główny ma stworzyć tyle procesów
potomnych, ile jest znaków ASCII w argumentach. Każdy proces potomny zlicza ilość wystąpień zadanego mu znaku ASCII i po zliczeniu ilości zwraca tę wartość do systemu przez exit lub return. Proces macierzysty
odbiera jego status i wyświetla informacje o każdym znaku.
if(argc<3) //ma być przynajmniej jeden argument dodatkowy
char strumien;
strumien=open(argv[1],O_RDONLY);
int i, j, z, st, in, poz;
int l=0;
int n=argc-2;
char znak;
pid_t p[n]; //tworzymy tyle procesów, ile trzeba
znak=(argv[i+2])[0]; //czy wymyśliłabym to, gdybym...
if(in==0) //jeśli p[i] == 0, czyli proces nie jest rodzicem...
printf("\n");
char *bufor = (char *) malloc (sizeof (char) * 10); //robimy 10-znakowy bufor
poz=lseek(strumien, 0, SEEK_SET); //startujemy od poczštku...
while(read(strumien,bufor,10)!=0) //wczytujemy sobie do bufora 10 znaków
{ //read COŚ zwraca i na tym się oprzemy
for(j=0; j<10; j++)
if(znak==bufor[j])
l++;
printf(".");
// poz=lseek(strumien, 10, SEEK_CUR);
exit(l);
for(j=0; j<n; j++)
int j;
for(j=0; p[j]!=z; j++);
printf("\nProces o ID %d naliczyl %d sztuk znaku \"%c\" \n", z, WEXITSTATUS(st), (argv[j+2])[0]);
Program #3:
Program ma za zadanie wyświetlić zawartość wskazanego argumentem
katalogu w formacie identycznym z wywołaniem polecenia "ls –l –a".
(W katalogu etc są podkatalogi group i password z nazwami grup i użytkowników
odpowiadajšcym ich numerom ID.
)
if(argc<2)
printf("Podaj sciezke!\n");
return -1;
// time_t rawtime;
struct tm * timeinfo;
char buffer [80];
...
wips1