Web Analytics

See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Standardowe strumienie - Wikipedia, wolna encyklopedia

Standardowe strumienie

Z Wikipedii

Standardowe strumienie wejścia, wyjścia i błędów
Standardowe strumienie wejścia, wyjścia i błędów

Standardowe strumienie - standardowe kanały komunikacji między komputerem a otoczeniem (zwykle terminalem). Występują w Uniksie i systemach uniksopodobnych, w środowisku uruchomieniowym C, C++ i ich pochodnych. Trzy podstawowe połączenia I/O noszą nazwy: standard input (stdin, standardowy strumień wejścia), standard output (stdout, standardowy strumień wyjścia) i standard error (stderr, standardowy strumień błędów).

Spis treści

[edytuj] Historia

W większości systemów operacyjnych starszych od Uniksa program musiał samodzielnie podłączać się do odpowiednich urządzeń obsługi wejścia/wyjścia.

Unix zapewniał kilka przełomowych możliwości, jedną z nich były tzw. urządzenia abstrakcyjne (ang. abstract devices), co zdjęło z programisty potrzebę znajomości specyfikacji urządzenia z którym się komunikował. Starsze systemy wymagały od programisty znajomości sposobu składowania i wymiany danych. Unix wyeliminował tę konieczność poprzez koncepcję strumienia danych - uporządkowanej sekwencji bajtów zakończonych znakiem końca pliku (EOF). Program może również zapisywać bajty jak chce i nie musi deklarować ile ich będzie ani jak będą uporządkowane.

Inną możliwością było automatyczne zapewnienie programowi łączności ze standardowymi strumieniami - w starszych systemach programista musiał się o to samodzielnie zatroszczyć.

Unix obsługiwał strumienie więc biblioteka standardowa języka C też musiała zapewniać ich obsługę. W wyniku większość standardowych bibliotek C umożliwia wykorzystanie strumieni nawet jeżeli system operacyjny nie zapewnia takiego rozwiązania.

[edytuj] Standardowy strumień wejścia (stdin)

Standardowy strumień wejścia to dane (zwykle tekst) przekazywane do programu. Pobiera on dane poprzez użycie funkcji read. Nie wszystkie programy wymagają danych wejściowych. Przykładowo, dir albo ls wykonują swoją funkcję nie pobierając żadnych danych z stdin. O ile strumień nie jest przekierowany, dane są pobierane z terminala, z którego został uruchomiony program.

Deskryptor pliku standardowego strumienia wejścia wynosi 0 (zero); odpowiadającą mu zmienną z <stdio.h> jest FILE* stdin, a z <iostream> jest std::cin.

[edytuj] Przykład

bash < skrypt.sh      # spowoduje wykonanie instrukcji zawartych w pliku
                      # skrypt.sh przez interpretator bash
cat < plik.txt        # taki sam efekt jak cat plik.txt

[edytuj] Standardowy strumień wyjścia (stdout)

Standardowy strumień wyjścia to strumień, do którego program zapisuje dane wynikowe. Robi to za pomocą funkcji write. Niektóre programy nie zwracają danych wynikowych - na przykład mv nic nie wypisuje jeżeli przeniesienie się powiodło. Jeżeli strumień nie jest przekierowany dane są wysyłane do terminala z którego uruchomiono program.

Deskryptor pliku standardowego strumienia wyjścia wynosi 1 (jeden); odpowiadającą mu zmienną z <stdio.h> jest FILE* stdout, a z <iostream> jest std::cout. Aby przekierować strumień błędów w powłokach bazowanych na sh należy użyć znaków > (jeżeli chcemy zastąpić adres docelowy danymi ze strumienia) lub >> (jeżeli chcemy dopisać dane na końcu pliku docelowego).

[edytuj] Przykład

echo "ABC" > plik.txt     # spowoduje wyczyszczenie pliku plik.txt (lub utworzenie
                          # jeśli nie istnieje) i dopisanie znaków  ABC
 
echo "CBA" >> plik.txt    # spowoduje dopisanie znaków  CBA na koniec pliku plik.txt
                          # lub jego utworzenie i dopisanie tych znaków
 
cat plik1.txt > plik2.txt # efekt identyczny jak w przypadku polecenia
                          # cp plik1.txt plik2.txt

[edytuj] Standardowy strumień błędów (stderr)

Standardowy strumień błędów jest zwykle wykorzystywany do wyświetlania komunikatów o błędach i informacjach przydatnych do debugowania. Jest on niezależny od strumienia wyjścia. Zwykle celem strumienia jest, podobnie jak przy stdout terminal z którego uruchomiono program aby umożliwić zobaczenie błędu nawet wtedy, gdy strumień wyjścia jest przekierowany. Jeżeli używamy potoku aby użyć danych wynikowych jakiegoś programu jako danych wejściowych dla innego to błędy i tak zostaną wypisane na terminalu.

Gdy strumienie wyjścia i błędów mają ten sam cel (np. terminal) to są wyświetlane w takiej kolejności, w jakiej wypisuje je program, o ile nie korzysta się z buforowanego wyjścia. W takim wypadku dane z stderr wyświetlają się wcześniej, gdyż są zwykle niebuforowane, w przeciwieństwie do stdout, które są zwykle zapisywane w buforze przed wyświetleniem.

Deskryptor pliku standardowego strumienia wyjścia wynosi 2 (dwa); odpowiadającą mu zmienną z <stdio.h> jest FILE* stderr. <iostream> zapewnia dwie zmienne do obsługi strumienia błędów - std::cerr (niebuforowana) std::clog (buforowana). Aby przekierować strumień błędów w powłokach bazowanych na sh należy użyć znaków 2>.

[edytuj] Przykład

$ rm -rf /                # spowoduje usunięcie wszystkich plików na dysku,
                          # do których dany użytkownik ma prawa pisania ("w") oraz
                          # wyświetlenie komunikatów o tym, że nie można usunąć
                          # tych plików, do których użytkownik nie posiada praw ("w")

$ rm -rf / 2> /dev/null   # spowoduje usunięcie wszystkich plików na dysku,
                          # do których dany użytkownik ma prawa pisania ("w"),
                          # a komunikaty o błędach zostaną przekierowane      
                          # do /dev/null, czyli śmietnika

[edytuj] Zobacz też

[edytuj] Źródło

Static Wikipedia (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia February 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu