Wpis z mikrobloga

Programistyczne mirki - ostatnie zadanie przed moim kolokwium :)

Tym razem... ...program coś nie chce działać :/
Pytanie brzmi: co pojawi się na wyjściu standardowym w wyniku wykonania poniższego programu?

Jedyne, czym raczy mnie Ubuntu to: Tworzenie kolejki FIFO: File exists
I nic więcej się nie dzieję.

Na moje wygląda (a przynajmniej powinno) to tak, że:

1. Potomek wpisuje "klmnop" na deskryptorze 2.
2. Wyświetla się "P1".
3. Przechodzimy do else'a. Na moje powinny się poprostu wypisać wszystkie printf'y, gdyż nie ma i tak żadnego printf'a z buf.

Coś źle rozumiem, czy faktycznie zadanie jest skopane? (albo kolejne podchwytliwe...)

#programowanie #pytaniedoeksperta #informatyka #linux
crushyna - Programistyczne mirki - ostatnie zadanie przed moim kolokwium :)

Tym ra...

źródło: comment_VZyYtRnymTVa22QXqwsSgG2Bg9rV7sU0.jpg

Pobierz
  • 22
@crushyna przecież jak warunek w if'ie jest spełniony czyli pid==0 to wykonuje się to co jest najpierw czyli ten write i printf ("P1\n"); i kończy if'a a nie przechodzi do elsa żeby przeszło do elsa warunek nie może być spełniony czyli pid musi być inne od 0
@crushyna tak jak napisałeś, procesy wykonują się równolegle, ale jest kilka możliwości jeśli chodzi o kolejność wypisywania na wyjściu(przydział procesora), więc może być tak, że najpierw wykona się else a potem proces potomny wypisze swoje printfy.
nie mniej jednak

@crushyna:
Po pierwsze primo pisze się "niemniej". #grammarnazi
Po drugie primo write(1, ...) powinno dać Ci do myślenia
Po trzecie primo komunikat o którym wspomniałeś na początku "Tworzenie kolejki FIFO: File exists" jest co najmniej dziwaczny i wygląda na generowany przez polecenie perror, którego w Twoim kodzie nie widzę.
Po trzecie primo zastanów się nad sformułowaniem "blokujące wejście/wyjście".
Po czwarte primo nie odpowiedziałeś na moje pytanie z pierwszego
@zakowskijan72:
- No to write(1... trochę mi miesza. Nie wiem, do czego się odnosi ta 'jedynka'.
- Nie ma perror w skrypcie. Takie coś mi zwraca Ubuntu w terminalu zwyczajnie :P
- Co z tym "blokujące wejście/wyjście" mam zrobić? Nie nadążam ;o
- Mój błąd, nie zauwayłem. Odpowiedź brzmi: nie ;)
@crushyna:

No to write(1... trochę mi miesza. Nie wiem, do czego się odnosi ta 'jedynka'.

Standardowo masz otwarte trzy deskryptory:
0 - stdin
1 - stdout
2 - stderr
write(1, ...) to jest właśnie wypisanie na standardowe wyjście. Czyli dokładnie tam gdzie wypisuje printf.

Nie ma perror w skrypcie.

To nie skrypt ale program :)

Co z tym "blokujące wejście/wyjście" mam zrobić?

Generalnie jeśli masz nieblokujące wejście/wyjście to komenda read zwróci
Wejścia / wyjścia nie są blokowane - bo czym?

@crushyna: Inaczej: wejścia/wyjścia są blokujące "z defaultu". Możesz je zmienić na nieblokujące, ale do tego trzeba odpowiedniego kodu.

Wyżej zjadłem tylko int main()

Main jest. Pytanie, gdzie masz dyrektywy include, które odpowiedni zadeklarują Ci funkcje z których korzystasz.
@crushyna: Include'y to nie biblioteki tylko nagłówki deklarujące funkcje. Biblioteki linkujesz, ale to już inna para kaloszy. To raz.
Dwa: nie widzę tu nigdzie badania wartości którą zwraca pipe. To ważne, żeby wykryć, czy funkcja wykonała się poprawnie, czy nie.
Trzy: zrób coś z tym formatowaniem, bo oczy bolą.
Cztery. Twój program w procesie potomnym zapisze 6 bajtów do fifo i wypisze "P1". W procesie rodzica odczyta cztery bajty, wypisze je