C i przygotowanie programu na podstawie algorytmu
C i przygotowanie programu na podstawie algorytmu
Witam serdecznie,
Muszę przygotować program, ale nie mam pojęcia jak go ugryźć.
Będę wdzięczny za wszelką pomoc, która zbliży mnie do zakończenia tej sprawy.
Treść zadania
Opracować program (patrz rysunek powyżej - proces główny), który utworzy dwa procesy potomne, w których uruchomione zostaną kolejne programy (patrz rysunek powyżej - proces podrzędny l oraz proces podrzędny 2) poprzez wywołanie funkcji exec. Procesy podrzędne powołają po jednym wątku, które będą realizować obliczenia. Użytkownik ma mieć możliwość z poziomu procesu głównego wykonania następujących funkcji:
1. wprowadzenie wartości całkowitych (w przedziale od dwóch do czterech wartości):
2. zlecenie wykonania operacji wyliczenia sumy kwadratów, wprowadzonych w punkcie pierwszym:
3. zakończenia działania obu programów.
Dane wprowadzone przez użytkownika (po wybraniu przez niego funkcji 1) przekazywane są z procesu głównego do procesu podrzędnego l (po wybraniu przez użytkownika funkcji 2), za pomocą łącza nazwanego. Proces podrzędny l po otrzymaniu danych powinien je przesłać, za pomocą łącza nienazwanego, do wątku A, który wyliczy potęgi dwójkowe poszczególnych wartości. Wątek A wyniki obliczeń przekazuje za pomocą łącza nazwanego do wątku B. który wyliczy ich sumę. Po wyliczeniu sumy. wątek B przekazuje wynik przez łącze nazwane do procesu podrzędnego 2. który przekazuje go poprzez łącze nienazwane do procesu głównego w celu wyświetlenia na ekranie terminala.
Proces główny kończy swoje działanie po wybraniu przez użytkownika funkcji 3 przesyłając jednocześnie do procesu podrzędnego l sygnał SIGINT. Po otrzymaniu sygnału SIGINT proces podrzędny l powinien: przesiać do procesu podrzędnego 2 sygnał SIGUSR1, wymusić zakończenie wątku A i następnie zakończyć swoje działanie. Po otrzymaniu sygnału SIGUSR1 proces podrzędny 2 powinien wymusić zakończenie wątku B i następnie zakończyć swoje działanie.
Użytkownik powinien mieć możliwość wykonywania operacji w pętli dopóki nie wybierze funkcji 3.
Poszczególne operacje ciastkowe powinny być zobrazowane w postaci odpowiednich komunikatów na ekranie monitora.
Muszę przygotować program, ale nie mam pojęcia jak go ugryźć.
Będę wdzięczny za wszelką pomoc, która zbliży mnie do zakończenia tej sprawy.
Treść zadania
Opracować program (patrz rysunek powyżej - proces główny), który utworzy dwa procesy potomne, w których uruchomione zostaną kolejne programy (patrz rysunek powyżej - proces podrzędny l oraz proces podrzędny 2) poprzez wywołanie funkcji exec. Procesy podrzędne powołają po jednym wątku, które będą realizować obliczenia. Użytkownik ma mieć możliwość z poziomu procesu głównego wykonania następujących funkcji:
1. wprowadzenie wartości całkowitych (w przedziale od dwóch do czterech wartości):
2. zlecenie wykonania operacji wyliczenia sumy kwadratów, wprowadzonych w punkcie pierwszym:
3. zakończenia działania obu programów.
Dane wprowadzone przez użytkownika (po wybraniu przez niego funkcji 1) przekazywane są z procesu głównego do procesu podrzędnego l (po wybraniu przez użytkownika funkcji 2), za pomocą łącza nazwanego. Proces podrzędny l po otrzymaniu danych powinien je przesłać, za pomocą łącza nienazwanego, do wątku A, który wyliczy potęgi dwójkowe poszczególnych wartości. Wątek A wyniki obliczeń przekazuje za pomocą łącza nazwanego do wątku B. który wyliczy ich sumę. Po wyliczeniu sumy. wątek B przekazuje wynik przez łącze nazwane do procesu podrzędnego 2. który przekazuje go poprzez łącze nienazwane do procesu głównego w celu wyświetlenia na ekranie terminala.
Proces główny kończy swoje działanie po wybraniu przez użytkownika funkcji 3 przesyłając jednocześnie do procesu podrzędnego l sygnał SIGINT. Po otrzymaniu sygnału SIGINT proces podrzędny l powinien: przesiać do procesu podrzędnego 2 sygnał SIGUSR1, wymusić zakończenie wątku A i następnie zakończyć swoje działanie. Po otrzymaniu sygnału SIGUSR1 proces podrzędny 2 powinien wymusić zakończenie wątku B i następnie zakończyć swoje działanie.
Użytkownik powinien mieć możliwość wykonywania operacji w pętli dopóki nie wybierze funkcji 3.
Poszczególne operacje ciastkowe powinny być zobrazowane w postaci odpowiednich komunikatów na ekranie monitora.
reo, pochwal się ile jest pieniędzy do podziału za ten projekt. Chętnie tu na tym forum ktoś pomoże ale nikt nie jest na tyle naiwny aby wykonać czarną robotę i nic z tego nie mieć. Jak przedstawisz fragment kodu, w którym masz błędy to ktoś pomoże rozwiązać. Całego projektu nikt za Ciebie nie napisze.
reo, odnośnie zadań postępuj podobnie. Przedstaw fragment kodu, z którym masz problem - ktoś pomoże.
Zadań też nie rozwiązujemy. To Ty dostaniesz zaliczenie i masz się czegoś nauczyć. Ty będziesz kiedyś specjalistą i będziesz musiał rozwiązywać problemy. Jeżeli brałeś udział w zajęciach to na pewno masz podstawy do napisania takiego projektu. Jeżeli obijałeś się to musisz to nadrobić.
Zadań też nie rozwiązujemy. To Ty dostaniesz zaliczenie i masz się czegoś nauczyć. Ty będziesz kiedyś specjalistą i będziesz musiał rozwiązywać problemy. Jeżeli brałeś udział w zajęciach to na pewno masz podstawy do napisania takiego projektu. Jeżeli obijałeś się to musisz to nadrobić.
W C nie kodzę, ale szczerze mówiąc (i zaglądając tu i ówdzie do wygooglanego tutka) patrząc w opis zadania widzę na przykład 
Na trzeciej stronie podręcznika systemowego opisane masz specyficzne linkusowe dyrektywy.
Sprawdź na przykład man 3 stdio.
Dane wprowadzone przez użytkownika scanf ("%d", &a)
Język to język. Trzeba tylko ścieżki typu C:\WINDOWS zamienić na /usr/bin i po krzykunie idzie mi programowanie pod systemami Unix-owymi

Na trzeciej stronie podręcznika systemowego opisane masz specyficzne linkusowe dyrektywy.
Sprawdź na przykład man 3 stdio.
W którym miejscu popełniłem błąd w poniższym kodzie?
Kod: Zaznacz cały
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
int Wylicz_potegi(int liczba)
{
int wynik;
wynik = liczba*liczba;
printf("Wynik = %d", wynik);
pthread_exit(NULL);
}
int main (int argc, char *argv[])
{
int tab=2;
pthread_t watek_A;
pthread_create(&watek_A, NULL, Wylicz_potegi, int tab);
pthread_exit(NULL);
}
-
- Beginner
- Posty: 113
- Rejestracja: 11 września 2008, 15:48
Rzeczywiście najczęściej w różnych przykładach funkcja pthread i jej argument jest typu void.
Ale niestety ja muszę przekazać do wątku argument typu int.
Ale niestety ja muszę przekazać do wątku argument typu int.
- Proces podrzędny l po otrzymaniu danych powinien je przesłać, za pomocą łącza nienazwanego, do wątku A, który wyliczy potęgi dwójkowe poszczególnych wartości.
-
- Beginner
- Posty: 113
- Rejestracja: 11 września 2008, 15:48
Kod: Zaznacz cały
void* = (void*)&int
int = *((int*)void*)