[21:15] ok [21:15] zaczynamy ;> [21:15] *** Gynvael sets mode: +m [21:15] OK ;> [21:15] Witam wiec wszystkich na 9wiatej czesci tego cuda ircowego ;> [21:15] eghem miales mi wytlmaczyc [21:15] ostatnio bylo o preprocesorze [21:15] Blizzard: -=211015=- <@Gynvael> Blizzard: zaczne od tego twojego przykladu [21:15] a ok [21:15] a dzisiaj bedzie o obsludze plikow [21:16] ale wczesniej o liczbach pseudolosowych [21:16] w headerku stdlib.h zadeklarowane jest pare instrukcji ktore umowliwiaja generowanie liczb (pseudo) losowych [21:16] *** Qui-Gon sets mode: +oo phoenix__ randomize [21:16] sa to: [21:17] Gynvael: mozesz na c++ tlumaczyc? [21:17] Blizzard: jest bez roznicy [21:17] ale to jest bibl w c [21:17] jedyna roznica jest w tym ze w C++ nie ma stdlib.h tylko jest cstdlib i using namespace std [21:17] ok [21:17] wiec [21:17] sa to: [21:17] *** sfistack [~superb@cji138.neoplus.adsl.tpnet.pl] has joined #gynkurs [21:17] int rand(void) [21:18] ktora zwraca liczbe od 0 do RAND_MAX [21:18] *** ^a1^ [antonone@212.244.84.130] has joined #gynkurs [21:18] na kompilatorach z rodziny gcc RAND_MAX bywa zdefiniowane (w stdlib.h lub cstdlib) jako 214748364 [21:18] czyli maxymalny mozliwy int/long [21:19] druga funkcja jest void srand(unsigned int seed) [21:19] *** Blizzard sets mode: +oo sfistack ^a1^ [21:19] funkcja ta sluzy do wyboru nowej sekwencji liczb pseudolowoych o okreslonym seedzie [21:19] ;] [21:19] najczesciej na poczatku programow mozna spotkac linijke [21:19] srand(time(NULL)); [21:20] *** SlimFast is now known as SlimAway [21:20] (i include'a time.h) [21:20] cya ll [21:20] ktora powoduje wybranie seeda takiego jak liczba sekund ktora uplynela od roku 1970 (bo to zwraca time(NULL)) [21:21] w wypadku gdy nie wybierzemy seeda, przy wywolaniu rand() dostajemy liczbe z defaultowej sekwencji [21:21] *** randomize sets mode: -o SlimAway [21:21] co prowadzi do wygenerowania takiej samej sekwencji przy kazdym wlaczeniu kompa na danym kompie/osie [21:21] (z tym ze na roznych osach/kompach te sekwencje MOGA (ale nie musza) sie roznic) [21:22] (zeby taka sytuacja nie miala miejsca uzywa sie wlasnie tego srand(time(NULL));) [21:23] ok [21:23] teraz jak uzywac rand() [21:23] zazwyczaj chcemy dostac (pseudo) losowa liczbe z jakiegos zakresu [21:23] np do 100 do 199 [21:23] rand zwraca liczbe od 0 do MAX_INT, wiec to za bardzo nam nie pomaga.. [21:23] na pierwszy rzut oka [21:23] z pomoca przychodzi jednak proste dodawanie [21:24] i operacja modulo (reszta z dzielenia) [21:24] *** sfistack_ [~superb@ckc137.neoplus.adsl.tpnet.pl] has joined #gynkurs [21:24] po pierwsze, w naszym zakresie jest 100 mozliwych kombinacji [21:24] (mozemy ew uzywac wzoru KONIEC_ZAKRESU - POCZATEK_ZAKRESU + 1) [21:24] (np 199 - 100 + 1 = 99+1 = 100) [21:25] robimy wiec rand() % 100 [21:25] i dostajemy juz liczby z przedzialu 0 do 99 (wlasciwosci reszty z dzielenia) [21:25] teraz wystarczy dodac POCZATEK_ZAKRESU (czyli 100) [21:25] i dostajemy rand() % 100 + 100 [21:25] czyli liczby od 100 do 199 tak jak chcielismy [21:26] *** Qui-Gon sets mode: +o sfistack_ [21:26] na privie dostalem pytanie [21:26] co sadze o uzyciu srand( (unsigned)time( NULL ) ); zamiast srand( time( NULL ) ); [21:27] rzucmy okiem co zwraca time() [21:27] man 2 time [21:27] time_t time(time_t *t); [21:27] teraz rzucmy okiem na definicje time_t w /usr/include/time.h (badz dev-cpp\include\time.h) [21:28] typedef __time_t time_t; [21:29] *** chris^^ [~xor666@pc12.wolnosci.zamek.net.pl] has joined #gynkurs [21:29] ( grep --recursive __time_t /usr/include/ u mnie pomoglo ;) [21:29] /usr/include/bits/types.h:typedef __TIME_T_TYPE __time_t; /* Seconds since the Epoch. * [21:29] rany ale zaglebien -- [21:30] /usr/include/bits/typesizes.h:#define __TIME_T_TYPE __SLONGWORD_TYPE [21:30] ;] [21:30] /usr/include/bits/types.h:#define __SLONGWORD_TYPE long int [21:30] ok [21:30] czyli time_t to long int [21:31] sizeof(long int) to 4 bajty [21:31] czyli time() zwraca wartosci od 0 do 2147483647 [21:32] czyli danie (unsigned) przed to nie zmienia totalnie nic [21:32] ;> [21:32] wiec time( srand(NULL) ) to dokladnie to samo co time( (unsigned)srand(NULL) ) [21:32] ok [21:32] tyle o rand/srand, za chwile przyklad [21:32] teraz pytanka [21:32] *** Gynvael sets mode: -m [21:32] jakies pytanka ? [21:32] ile trwa przerwa? :> [21:32] *** sfistack has quit IRC (Ping timeout) [21:32] <^a1^> moge do lazienki? ;p ;] [21:33] randomize: zalezy od ilosci pytan ;ppppppppp [21:33] *** sfistack_ is now known as sfistack [21:33] czy w weekendbedzie pytanie ? [21:33] ^a1^: mozesz [21:33] lolz [21:33] ;> [21:33] <^a1^> ;) [21:33] ^a1^: ok, umyj mi rece przy okazji ;p [21:33] gyn zmien nick na GW [21:33] gyn wolontariusz ;> [21:33] lol [21:33] gyn to po wiesniacku a ludzie z miasta mowia gynv :PPP [21:33] ja mam pytanko: [21:33] a wiec gyn ;> [21:33] ^^ [21:33] phoenix__: w nastepny weekend [21:33] phoenix__: w ten moze wrzuce jakas liste zadan [21:34] na jakiej zasadzie jest robione srand? [21:34] :P [21:34] znaczy w jaki sposob on to sobie miesza? [21:34] Gynvael: juzktorys taz slysze ze w nastepny weekend [21:34] Gynvael: czy jest mozliwe ustawienie srand na urandom pod linuksem ? [21:34] kurde spacja mi cos przerywa jak klawierkeprzestawilem na USB [21:34] *** chris^^ has left #gynkurs [21:34] i jak to sie sprawdza ? [21:34] Qui-Gon: hehe szczerze ? nie wiem ;> ja znam jeden sposoob tworzenia liczb pseudolosowych (podawalem go adamowi bodajze po #7) [21:34] Qui-Gon: a co do rand/srand.. coz.. odesle cie niestety do zrodel libc ;> [21:35] ehhh [21:35] :P [21:35] mulander: chodzi ci o /dev/urandom ? [21:35] tak [21:35] Gynvael: we wczesniejszy weekendmolwilesze w nastepny dzisiaj ze w nastepny [21:35] [21:35] mulander: hmm tylko "reczne" ustawienie tego kojraze [21:36] *** d0b0c0p is now known as jestem_gejem [21:36] phoenix__: hehehe roznie z czasem u mnie, sorx ;> [21:36] wiecie co [21:36] lol [21:36] lol [21:36] troche lipa ale renia nie dziala [21:36] lol [21:36] *** jestem_gejem is now known as d0b0c0p [21:36] d0b0c0p: jaja se robisz, czy na serio? :> [21:36] Cso salv padl I logi narazie neidzlaja [21:36] hehe [21:36] XD [21:36] d0b0c0p: ty miales mirror reni ne ? [21:36] dobra nvm [21:37] Gynvael: no troudno ,wiesz ja mam skleroze ;] [21:37] Ja wrzuce na inny serwer [21:37] jeszcze jakies ptanka ? [21:37] adam__i: ok [21:37] adam__i: wrzucaj [21:37] na progsmana [21:37] phoenix__: pisz progsy ;> duuuuuzo progsow ;> [21:37] dziala o wiele szybciej [21:37] Gynvael: wracajac do pytania, jak sie sprawdza /dev/urandom jako seed dla funkcji rand ? [21:37] Gynvael: co? [21:37] Gynvael: pisz... ciekawe o czym i jakie [21:37] mulander: nie testowalem ;> [21:38] d0b0c0p: juz nic [21:38] ;> [21:38] kk ;p [21:38] ok [21:38] lecimy dalej ? [21:38] Gynvael: juz mi sie znudzilo pisanie glupot np ze kolejneliczby ustawiasie do tablicy [21:38] Gynvael: to mi zadaj napisanie jakiegos [21:38] mulander: btw ja bym wogole zamiast randa czytal sobie z /dev/urandom ;> [21:38] ;] [21:38] http://progsman.webd.pl/adami/gynkurs/ [21:38] thx [21:38] Gynvael: tylko prosty ;] [21:39] phoenix__: heheh za pare dni wrzuce jakas liste zadanek na serva i dam linka [21:39] ada$ jeszcze zrodelka ;P [21:39] phoenix__: moze jakies pomysly ci przyjda [21:39] Gynvael: nie oswieci mnie raczej ;/ [21:39] *** Gynvael changes the topic to "dzisiaj (14.09) kolejna czesc (#9) - obsluga plikow || logi na: http://progsman.webd.pl/adami/gynkurs/ napalona.renia.beger.com/~adam/gynkurs/ || unknow: odez" [21:39] gynu w dawniejszych wersjach perla uzywalo sie takiego srand: srand(time ^ $$ ^ unpack "%L*", `ps axww | gzip`); co o tym myslisz ? [21:39] Gynvael: tzn mam mase pomyslow ale nierealne ;] [21:39] i czy widzisz odpowiednik tego w C ? [21:39] *** randomize changes the topic to "topic==obsluga plikow || logi na: http://progsman.webd.pl/adami/gynkurs/ napalona.renia.beger.com/~adam/gynkurs/ || unknow: odez" [21:39] Gynvael: np przerobienie bibliotek ;] [21:40] *** randomize changes the topic to "topic==obsluga plikow || logi na: http://progsman.webd.pl/adami/gynkurs/ napalona.renia.beger.com/~adam/gynkurs/ || unknow: odezwij sie-goblin" [21:40] mulander: malo znam perla ;> [21:40] XD [21:40] mulander: ale ciekawy s[pspb ;> [21:40] *sposob [21:40] ;> [21:40] teraz zbedny :P [21:40] mulander: ale hmm.. imho srednio skuteczny.. ps mozna podrobic ;p [21:40] :) [21:40] btw co zwraca to srand (time (NULL))? [21:41] ok [21:41] lecimy dalej ? [21:41] lecimy [21:41] ?? [21:41] albo cicho [21:41] momento ;> [21:41] nie mow [21:41] phoenix__: nic, void ;> [21:41] sam sprawdze [21:41] zrobie kawe jeszcze ;> [21:41] phoenix__: ustawia po prostu inna sekwencje liczb losowych [21:42] ok [21:42] Gynvael: a jakbyn dal srand ( time()) ?:> [21:42] lecimy dalej ? [21:42] 'unknow: odezwij sie-goblin' [21:42] qtf? [21:42] Gynvael tylko kawe wstawie [21:42] :> [21:42] wtf?* [21:42] nie chcialem, zeby sie unki odzywal [21:42] :P [21:42] phoenix__: to bys mial syntax error, [21:42] Qui-Gon to chyba ty kleiles topica :p [21:42] phoenix__: bo time przyjmuje jeden argument [21:42] ;> [21:42] aha [21:42] pix: ja tylko wywalilem cos z niego, a tam juz bylo wczesniejj odezwij sie [21:42] a da sie napisac prgz wyswietaljacy aktualna godzine [21:42] *** Qui-Gon changes the topic to "topic==obsluga plikow || logi na: http://progsman.webd.pl/adami/gynkurs/ napalona.renia.beger.com/~adam/gynkurs/ || unknow: odezwij sie" [21:43] phoenix__: da sie [21:43] Gynvael: tylko zeby sie zmieniala czyli nonstop [21:43] phoenix__: da sie [21:43] ok [21:43] Gynvael: i pprazyklad ;] [21:43] btw [21:43] lecimy ? [21:43] kurwa dalej cicho juz [21:43] tzn jak [21:43] *** Blizzard sets mode: +m [21:43] gyn pisz kod na czerwono moze [21:43] ;> [21:43] albo zielono [21:43] bedzie czytelniej [21:43] phoenix__: while(1) printf("%i:%i\r", time()%60, (time()/60)%60); [21:43] phoenix__: prosze ;> [21:43] ok [21:43] lecimy ?:P [21:44] randomize: ale mi powiedz jak to sie w irssi robi [21:44] tya [21:44] aaa [21:44] ctrl+k [21:44] dalejh [21:44] crtl+k chyba [21:44] albo c [21:44] ne pamietam juz [21:44] i kolor czerwonego chyba 4 jest [21:44] 1 ala [21:44] 3 ala [21:44] 4 ala [21:44] XD [21:44] git [21:44] ok [21:44] to bedzie na czerwono [21:45] good [21:45] ok [21:45] a wanze rzeczy na zielono [21:45] lecimy dalej [21:45] dobra [21:45] 4 [21:45] co? [21:45] kolorki [21:45] omfg [21:45] teraz rzucmy okiem na przyklad Blizzarda [21:45] 4 [21:45] 4lol [21:45] aa:) [21:45] http://rafb.net/paste/results/7aMBXr62.html [21:45] dajcie mi 3 sec to przeklepie na C ;> [21:45] idem po monitor monochromatyczny :p [21:45] Gynvael: c++ [21:45] ;\ [21:46] ale to przecierz to z bledami [21:46] :P [21:47] *** randomize sets mode: -o bubel [21:47] no po to wkleilem tam zebyscie pokazali jak ztym srand [21:47] http://rafb.net/paste/results/12V9hh54.html [21:47] to samo w C [21:48] dobra [21:48] * randomize prosze podnosic lapki jak sie chce mowic :> [21:48] jak program dziala [21:48] e w8 [21:48] jeszcze blad tam jeden jest [21:48] Gynvael: tam jest kupa bledow :P [21:49] jakie? [21:49] http://rafb.net/paste/results/ciuwcw43.html [21:49] ok [21:49] ;> [21:49] Blizzard: srand nic nie zwraca [21:49] Blizzard: a bylo a = ... [21:49] ok [21:49] wiec [21:49] co sie dzieje po kolei [21:49] 4srand(time(NULL)); [21:49] wybierana jest losowa sekwencja [21:49] 4 a = rand() % 100; [21:50] Gynvael: ok [21:50] generowana jest pseudolosowa liczba od 0 do 99 i zapisywana do "a" [21:50] potem jakis puts i label od goto 3wprowadzenie [21:51] potem jest scanf o ktorym bedzie pozniej [21:51] narazie powiem tylko ze zczytuje jednego inta z "klawiatury" (stdin) i zapisuje do zmiennej b [21:51] a potem w zaleznosci od tego czy sie trafi w liczbe czy nie [21:51] program wypisuje czy podalismy za mala, za duza badz dobra liczbe [21:51] i wraca na "wprowadzenie" [21:52] (chociaz w sumie logicznie rzecz biorac w 26 linii nie powinno byc goto) [21:52] czyli jest to typowa zgadywanka [21:52] jako ze goto jest podobno nie ladne (utrudnia czytanie etc) [21:52] wiec mozna to zapisac tez za pomoca petli while [21:53] (petle byly na ktoryms z wczesniejszych "wykladow") [21:53] http://rafb.net/paste/results/srpYG252.html [21:54] ten program robi analogicznie to samo [21:54] tyle ze zamiast goto uzyte jest while [21:54] ok [21:54] teraz pytanka [21:54] a za chwile pliki [21:54] *** Gynvael sets mode: -m [21:56] wiec [21:56] ? [21:56] bez pytan ?;> [21:56] a ktos wogoole jest hihi ? [21:56] ja jestem :P [21:56] =) [21:56] ja ;p [21:56] a o czym mowa? :F [21:56] Gynvael: to o czym mowisz jest takie banalne, ze nawet ja nie mam pytan :P [21:56] wybacz ze nie pytam ale kobiety mi zabieraja duzo skupienia XD [21:57] jak zobaczylem asma to proszedlem :] [21:57] * poszedlem [21:57] ;> [21:57] ok [21:57] tyo dalej [21:57] *** Gynvael sets mode: +m [21:57] *** d0b0c0p sets mode: +oo bubel SlimAway [21:57] ok [21:57] wiec [21:58] teraz pobawimy sie stdin/out/err [21:58] i innymi strumieniami/plikami [21:58] ok [21:58] ale najpierw.. [21:58] co to plik chyba kazdy wie ne ? [21:58] to takie cos co jest na dysku [21:58] ma okreslona zawartosc i wielkosc [21:59] wielkosc to wielkosc zawartosci wyrazona w bajtach [21:59] ;> [21:59] kazdy bajt w uf pliku ma swoj adres (offset) [22:00] pierwszy bajt jest na adresie 0rowym [22:00] drugi na pierwszym etc [22:00] zupelnie jak w tablicy [22:00] ok [22:00] teraz tak [22:00] kazdy pameita wskazniki ? [22:00] ta ;] [22:01] ja troche ale wiecej z C++ [22:01] jesli chodzi o obsluge plikow, jest cos takiego jak wskaznik pliku (ew sa dwa wskazniki, ale nvm) [22:01] * Qui-Gon kawa puki mowisz o prostych rzeczach :P [22:01] w momencie gdy odczytamy pare bajtow z pliku, ten wskaznik przesuwa sie o te pare bajtow [22:02] ok [22:02] ale tyle na sucho [22:02] w C jest pare "interface'ow" (zestawow polecen) do obslugi plikow [22:02] ja podam tylko jeden zestaw [22:02] w stdio.h podeklarowane sa funkcje: [22:02] fopen - otwiera plik [22:03] fclose - zamyka plik [22:03] fread - czyta z pliku [22:03] fwrite - zapisuje do pliku [22:03] (porzadnie o nich za chwile bedzie) [22:03] fputs - zapisuje do pliku string [22:03] fgets - odczytuje linie z pliku (textowo) [22:03] fseek - idzie na okreslony offset w pliku [22:03] ftell - podaje gdzie jest [22:04] calosc operuje na typie FILE* [22:04] czyli wskaznik na jakies FILE [22:04] co to jest FILE mowil nie bede ;> [22:04] why? :P [22:04] ;> [22:05] jako odpowiedz na to pytanie zacytuje fragment stdio.h z MINGW Gcc [22:05] * Some believe that nobody in their right mind should make use of the * internals of this structure. Provided by Pedro A. Aranda Gutiirrez [22:05] a w wolnym tlumaczniu? [22:06] "Niektorzy uwazaja ze nikt normalny nie powinien uzywac wnetrza tej strukturki" [22:06] chodzi ogolnie o to ze w kazdym kompilatorze SLUZY ONA DO TEGO SAMEGO [22:06] ale jest INACZEJ ZBUDOWANA [22:06] ;> [22:06] wiec wiedza jak uzywac wskaznika do niej wystarcza [22:06] nie trzeba wiedziec jak jest ona zbudowana ;> [22:06] teraz tak [22:07] * Qui-Gon pytanie [22:07] FILE *fopen(const char *nazwa, const char tryb); [22:07] Qui-Gon: chwila [22:07] fopen powoduje OTWARCIE (przygotowanie do uzycia) pliku "nazwa" w okreslonym trybie [22:07] podstawowymi trybami sa: [22:07] "r" - read - odczyt [22:07] "w" - write - zapis [22:08] "a" - append - dodanie czegos na koneic pliku ("w" powoduje wyczyszczenie zawartosci pliku, "a" nie) [22:08] po za tym jest jeszcze pare r+ w+ i a+ ale nvm, to mozecie w manie doczytac [22:08] teraz notka dla userow Windowsa [22:08] jakos ze Bill mial jakis genialny pomysl [22:09] ^^ [22:09] x) [22:09] to u was sa dwa tryby odczytu/zapisy plikow [22:09] BINARANY i TEXTOWY [22:09] roznica jest tylko jedna [22:09] w BINARNYM znak nowej linii (\n) zapisywany jest do pliku (i odczytywany) jako.. \n ;> [22:09] a w TEXTOWYM jako \r\n --; [22:09] czyli dwa znaki [22:09] (i te dwa znaki sa odczytywane jako \n w TEXTOWYM) [22:10] w zwiazku z czym w windowsie mozna dac na koniec trybu literke "b" ktora wlaczy tryb binarny (defaultowo jest textowy) [22:10] np [22:10] "wb" [22:10] "rb" [22:10] "ab" [22:11] ok [22:11] teraz tak [22:12] moze maly przykladzik [22:12] a [22:12] w8 jeszcze [22:12] fopen zwraca FILE* [22:12] czyli pointer na tego strukta [22:12] z tego pointerku potem wszystko korzysta ;> [22:12] jesli zwroci NULL, to znaczy ze pliku nie udalo sie otworzyc/stworzyc [22:13] plik nalezy po skonczonym uzyciu "zamknac" [22:13] robiac fclose(f) [22:14] http://gynvael.vexillium.org/gk9_1.c [22:15] ok [22:15] jak dziala ten progs [22:15] po pierwsze tworzy plik "ala.txt" (tj otwiera go do zapisu, czysci jesli istnieje, tworzy nowy jesli nie istnieje) [22:15] po drugie, sprawdza czy udalo sie utworzyc (ten if tam) [22:16] po trzecie, uzywajac funkcji fputs [22:16] int fputs(const char *s, FILE *stream); [22:16] zapisuje string do tego pliku (z pominieciem \n) [22:16] nalezy zwrocic uwage ze fputs w przeciwienstwie do puts nie dodaje \n na koniec [22:16] *** randomize is now known as Alexy_Kwasny [22:16] -=221216=- <@Gynvael> zapisuje string do tego pliku (z pominieciem \n) [22:16] *pominieciem \0 [22:16] ;p [22:17] a nastepnie plik zostaje zamkniety [22:17] (fclose(f)) [22:17] teraz tak [22:17] *** Alexy_Kwasny is now known as Fidell [22:17] A \n jest dodwane skoncu ? [22:17] dane NEI SA ZAPISYWANE FIZYCZNIE DO PLIKU [22:17] adam__i: nie [22:17] adam__i: nie jest [22:17] dane NIE SA ZAPISYWANE FIZYCZNIE DO PLIKU [22:17] do momentu fclose [22:17] badz fflush [22:18] fflush(FILE* stream) powoduje zmuszenie systemu do zapisania teraz juz do pliku czegos [22:18] (inaczej system sobie bufferuje zeby nie rzezic dyskiem caly czas) [22:18] ok [22:18] czy sa pytanka ? [22:18] *** Gynvael sets mode: -m [22:18] A co bedze jak sei zpasize zaduzo danych tyle co sie w ramach niemiesci [22:19] adam__i: on sobie co iles tam bajtow/sekund zapisuje te dane [22:19] adam__i: po prostu nie odrazu [22:19] aha [22:19] ja mam takie pytanko [22:20] troche inne [22:20] jak instalowalem do tej pory cokolwiek na mojej windzie [22:20] to innymi slowy kompilowalem jakies programy?? [22:20] ee [22:21] nie [22:21] ;> [22:21] Btw co wyraza ten nowy wynalzek "e-e" [22:21] kompilacja != instalacja [22:21] Gynvael: no to co on robi tyle czasu? [22:21] Qui-Gon: upiles sie? ;>> [22:21] o gynv ;> [22:21] adam__i: stan przed lustrem i powiedz "Eeeee" i zrob glupia mine ;> [22:21] kompilacja = source to exe [22:21] binarki kopiuje? [22:21] *** j00ru`crk is now known as j00ru [22:21] Qui-Gon: a nie wime ;> [22:21] j00ru: no czesc ;> [22:21] hi all [22:21] Qui-Gon: rozpakowuje [22:21] Gynvael: lol z tym eeee ;P [22:22] Ale po co tam ten - [22:22] hi j00ru [22:22] j00ru: jaktam dsj? :>> [22:22] adam__i: przedluzenie dzwieku wyrazu.. przynajmniej tak na japonskim mialem ;>>>>. [22:22] [sorki nie tu] :P [22:22] d0b0c0p: nie mam czasu teraz na to ;p [22:23] hi j00ru [22:23] Gynvael: quiu-suqufas-wusuafu-wuauuw? [22:23] Co jezcze dzisaj bedzie ? [22:23] btw jestem troche w tyle tzn opozniony ;P minute w tyl ;P [22:24] adam__i: szybki przeglad po fukcjach [22:24] adam__i: i tyle w sumie [22:25] Gynvael: mozesz jeszcze jakis przyklad napisac na temat plikow ? [22:25] phoenix__: pewnie jeszcze pare napisze [22:25] dzisiaj .? [22:25] Gynvael mam pytanie mozna ? [22:25] mow mow [22:25] phoenix__: ta [22:26] Gynvael: tylko jak najwiecej ;P [22:26] istnieje mozliwosc w C zabezpieczenia pliku przed jednoczesnym zapisem z kilku zrodel ? [22:26] np. kiedy dwa thready jednego programu proboja pisac do tego samego pliku ? [22:26] albo kilka klientow w programie server/klient [22:26] o to jest dobre pyt. [22:27] btw. w php jest troche latwiej niz w c/c++ [22:27] nie trzeba bawic sie w pointery i NULLowanie [22:27] *** j00ru is now known as j00ru`aw [22:27] tak samo w perlu i w pythonie ale tematem jest C [22:27] :) [22:27] :] [22:28] Gynvael: to jak ? [22:28] mulander: tya, mozna [22:28] Gynvael: pokazes jak? [22:29] btw Gynvael zawsze trzeba sprawdzac [22:29] czy f==NULL? [22:29] Blizzard: bardzo dobrym pomyslem jest jednak sprawdzac [22:29] ;> [22:30] hmm [22:30] a te FILE *f musi byc? [22:30] Blizzard: nie pokaze, tylko powiem ze pod linuxem mozna uzyc unistd.h -> lockf(fileno(f), F_LOCK, 0) [22:30] chyba mnie wsio ominelo ;] [22:30] Blizzard: ta [22:30] bo nie bardzo rozumiem tego FILE? [22:30] Blizzard: patrz wyzej -- [22:30] Blizzard: to tak jak int i [22:31] ;p [22:31] Gynvael: nie no ja wszystko czytam [22:31] tylko nie rozumiem tego za bardzo [22:31] w php tego nie ma:P [22:31] *** Fidell is now known as pixelx_ [22:31] a [22:32] btw flock tez jest [22:32] z sys/file.h [22:32] flock(fileno(f), LOCK_EX) etc [22:32] ;> [22:32] w win tez? [22:32] wszedzie [22:32] to std C [22:32] hehe dokladnie tak jak w perlu czyli z tego jezyka to wzieli jak wiekszosc ^^ [22:33] mulander: chyba perl wzial od c :P [22:33] d0b0c0p wlasnie to mowie. [22:33] c chyba starszy [22:33] cauchy: hmm [22:33] cauchy: to nie jest std c [22:33] "czyli z tego jezyka to wzieli jak wiekszosc ^^" czyli perlowcy wzieli tak jak wiekszosc bibliotek ktore sobie pozyczylismy :P [22:33] cauchy: pod winda tego nie ma --; [22:33] Gynvael: ja mowie o flock [22:33] cauchy: ja tez ;> [22:33] dlatego lubie perla poniewaz emuluje flock'a jezeli niema go na platformie :P [22:33] flock jest [22:34] cauchy: w moich libach nie ma --; [22:34] a ja lubie asma, bo nie ma jak api i int'y ;p [22:34] :) [22:34] gynv a z czego korzystasz ? [22:34] cauchy: ani nie ma w MinGW GCC ani w Visual C++ [22:34] lcc ? [22:34] mingw mowil kilka razy :P [22:34] heh ja vc6 [22:35] vs2k3 i vs2k5 [22:35] Btw mzoe ktos wie co to za kontrolka takei cos jak memo w delphi [22:35] wszedzie mam ;] [22:35] cauchy: w ktorym include > [22:35] cauchy:? [22:35] a czekaj zaraz lukne ;p [22:35] cauchy: w Pelles C tez nie mam [22:35] tez mam vc6 [22:35] adam__i: nie mam pojecia [22:35] adam__i: nie mam pojecia jak memo wyglada ;] [22:36] ni ja [22:36] Taki cos na wpisywnie tekstu [22:36] gynv troche to potrwa bo musze zrodla znalezc ;] [22:36] Takei cso jak np notatnik ma [22:36] <^a1^> w vc7 nie ma flocka ;p [22:36] cauchy: kk [22:36] ale z tego co wiem flock jest zdeklarowany w ANSI [22:36] albo mam schizy^2 ;p [22:36] ide sprawdzic ;p [22:37] man flock page 2 [22:37] mam std od c99 [22:37] tam powinno wiecej o tym pisac ja niestety tutaj mana niemam :( [22:38] heh chyba nie ma [22:39] cauchy: w ISO/IEC 9899:1999 nie ma tego (to ANSI C99) [22:39] *** pixelx_ has quit IRC ("User pushed the X - because it's Xtra, baby") [22:39] cauchy: obawiam sie ze masz schizy^2 ;p [22:39] w takim razie jak programista C na platformie windowsa zabezpiecza plik przed jednoczesnym zapisem z kilku zrodel jezeli flock(); nie jest na danej platformie obslugiwany ? [22:39] a dziwne, zdawalo mi sie ze jak kiedys klepalem cos z plikami to bylo [22:40] czyli jednak schizy^2 [22:40] za malo piwa ;p [22:40] To ktos wie co to jest to co ma np notatnik do wpisywania tekstu [22:40] mulander: tam jakies funkcje WinAPI sa do tego, nie pamioetam juz jakie [22:40] rich edit [22:40] adam__i: "edit" [22:40] adam__i: RichEdit [22:40] nie edit [22:40] cauchy: notatnik nie ma richedit [22:40] nie e ;] [22:40] cauchy: tylko edit [22:40] Gynvael jakie to juz nie wazne bylem ciekaw czy to jest w standardzie czy juz w winapi :) [22:40] ;p [22:40] W edicie mozna na pare linijek wpisywac ? [22:40] adam__i: yep [22:40] a moze dlatego ze mam mutacje notatnika co ma richa ;] [22:40] adam__i: ta [22:41] U niewidzelm [22:41] kolorowanie skaldni etc ;p [22:41] adam__i: trzema mu ustawic ee afair ES_MULTILINE albo cos takiego [22:41] a [22:41] cauchy: --; ;pp [22:41] ja pod winshitem vima zainstalowalem :P [22:41] cauchy: czy ty wlasnie powiedziales ze masz skarpetke ktora jest pralka ?:P [22:41] gynv za szybko napierdzielasz po klawie ;) [22:41] cauchy: 10 klawiszy / sec ;p [22:41] heheh [22:41] <^a1^> hm.. to jak w win lockowac otwarte pliki? ;p [22:41] nie ja kondoma ktory robi za samochod ;p [22:41] ^a1^: ja odpalam filemon.exe ^^ [22:41] createfilea ;] [22:42] a [22:42] embedowac perla w swoj kod C i uzyc jego funkcji flock(); :PP [22:42] i ja jestem slepy [22:42] ;pppppp [22:42] <^a1^> z poziomu kodu [22:42] <^a1^> cauchy otwarte [22:42] "locknac" != "looknac" [22:42] ;ppppppppp [22:42] <^a1^> ;) [22:42] To mzoe wrocimy juz do kursu ? [22:42] nie mam pojecia jak pod winda locknac, w zyciu nie lockowalem ;> [22:42] ok [22:42] lecimy / [22:42] ? [22:42] tia [22:42] dobra [22:42] tiak [22:42] <^a1^> tak patrze teraz to nie ma mechanizmow zadnych [22:42] o to to byla przerwa ;] [22:42] bo odeszlismy od tematu [22:42] ;> [22:42] +m ;p [22:42] w/g mnie to bylo na temat :P [22:43] *** Gynvael sets mode: +m [22:43] ok [22:43] lecimy [22:43] dobra [22:43] teraz pare funkcji do zapisu [22:43] int fputc(int c, FILE *stream); [22:43] zapisuje JEDEN znak o podanym kodzie [22:43] np [22:43] red color ;P [22:43] 4fputc('a', f); [22:43] dalej... [22:43] int fputs(const char *s, FILE *stream); [22:44] to bylo przed chwlia [22:44] zapisuje string, bez \0 [22:44] size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); [22:44] size_t to int ;p [22:44] tak btw ;> [22:44] Gynvael co zwracaja te funkcje ? [22:45] size_t ;] [22:45] w sensie true/false ? [22:45] mulander: te poprzednie, EOF w wypadku bledu, lub parametr c zrzutowany na unsigned char jesli all ok [22:45] thx [22:45] mulander: www.cplusplus.com/ref/ [22:45] Gynvael: a jak sie usuwa plik [22:45] fwrite zapisuje 3size*nmemb bajtow z pamieci, od bajtu wskazanego przez pointer "ptr" [22:46] zmienia jego nazwe [22:46] Blizzard: unlink pod linem, ale to nie na temat [22:46] ;> [22:46] jak sie wywoluje wogole polecenia systemu [22:46] ;> [22:46] itp. [22:46] Blizzard: o tym bedzie kiedys indziej [22:46] ;> [22:46] system("ble"); [22:46] no ale usuwanie pliku tez powinno byc [22:46] d0b0c0p: bron boze ;p [22:46] ;\\ [22:46] #icnlude [22:47] dobra niewazne [22:47] d0b0c0p: nie szerz herezji plz ;> [22:47] d0b0c0p: nie ma funkcji system i gets ;> zapamietac! ;> [22:47] * Blizzard idzie sprobowac jak mowi d0b0c0p [22:47] * Blizzard :> [22:47] a co jest? [22:47] system nie jest w process.h ? [22:47] te funkcje sa ZLE :> [22:47] mulander: ne ;> [22:47] Gynvael: a jakie sa dobre [22:47] ;p [22:47] Blizzard: exec* (np execve) i fgets [22:48] ok [22:48] ale waracajac do tematu [22:48] fwrite zwraca ilosc zapisanych bajtow [22:48] na przyklad gdy zapisujemy tablice 10 intow [22:48] mozemy napisac: [22:48] fwrite(tablice, 4, 10, f); [22:48] rownie dobrze jak [22:48] fwrite(tablice, 1, 40, f); [22:48] natomiast unikal byl pisania [22:48] fwrite(tablice, 40, 1, f); [22:49] powniewaz wtedy mozna dostac jakis dziwny blad (progs sie wykszaczy) [22:49] ee [22:49] jako ze on proboje optymalizowac zapis etc etc ;> [22:49] nie czaje tego [22:49] czym to sie rozni od fputs [22:49] najlepiej pisac po prostu fwrite(tablica, 1, 40, f); i juz [22:49] i po co to [22:49] Blizzard: fputs zapisuje STRING, czyli ASCIIZ [22:49] Blizzard: a to zapisuje bajty [22:49] Blizzard: przykladowo: [22:49] fputs("ala ma kota", f); [22:49] zrobi to samo co [22:50] fwrite("ala ma kota", 1, 11, f); [22:50] fputs jest dobre do plikow tekstowych [22:50] ale do blikow binarnych lepszy jest zdecydowanie fwrite [22:50] ale co to za liczby te 1 i 11 [22:50] bo nie kumam [22:50] po co one [22:50] -=224155=- <@Gynvael> fwrite zapisuje size*nmemb bajtow z pamieci, od bajtu wskazanego przez pointer "ptr" [22:51] no wlasnie tego nie rozumiem [22:51] to jest ILOSC BAJTOW ktore maja byc zapisane do pliku od adresu podanego w pierwszym parametrze [22:51] o co ci chodzi [22:51] patrz [22:51] fwrite("abcdef", 1, 1, f); [22:51] to zapisze do pliku f literke "a" [22:51] fwrite("abcdef", 1, 2, f); "ab" [22:51] fwrite("abcdef", 1, 3, f); "abc" [22:51] fwrite("abcdef", 2, 2, f); "abcd" [22:51] fwrite("abcdef", 1, 4, f); "abcd" [22:51] fwrite("abcdef", 1, 5, f); "abcde" [22:51] fwrite("abcdef", 1, 6, f); "abcdef" [22:51] fwrite("abcdef", 1, 7, f); "abcdef" [22:51] eh [22:52] fwrite("abcdef", 1, 7, f); "abcdef\0" [22:52] no [22:52] fwrite("abcdef", 2, 3, f); "abcdef" [22:52] drugi parametr * trzeci parametr to ilosc bajtow ktore on ma zapisac [22:52] a dokladniej [22:52] wielkosc pola * ilosc pol [22:52] np dla tablicy [22:52] int a[10]; [22:52] sizeof(int) to wielkosc pola [22:52] a 10 to liczba pol [22:52] Gynvael: jak dasz na minusie, to kompilator bedzie krzyczal, czy przejdzie? [22:53] (2-gi i trzeci argument) [22:53] 2 param to po ile znakow ma zapisywac a 3 param ile razy taki zapis ma wykonac ;] [22:53] przejdzie [22:54] Gynvael: '-' oleje, czy bedzie jakios fajny bug? [22:54] na linuxie przyjmie to jako 0 [22:54] a windows zwisnie:D [22:54] buehehehe lol [22:54] Qui-Gon: powiem w C [22:54] Qui-Gon: if(wielkosc < 0 ) wielkosc = 0; [22:54] ;> [22:55] Gynvael; pod ms trak samo? [22:55] dzast czek it ;) [22:55] nie wiem [22:55] nie mam windy pod reka [22:55] zeby sprawdzic [22:55] ;> [22:55] cauchy: robie teraz matme na jutro i przysypiam troche, czasu mi nie starcza, a wy moze wiecie :P [22:55] ehehe bede musial na qemu odpalac [22:56] Qui-Gon: to pewnie jest zalezne od kompilatora [22:56] ok [22:56] Gynvael: mow mi po imieniu :P [22:56] lecimy dalej [22:56] ;p [22:56] (G0blin) [22:56] (wiem) [22:56] zaraz sprawdze na vc6 [22:56] (ale tab woli Qui-Gon ;p) [22:56] ok [22:56] koles jakis mi nicka podwalil...... :/ [22:56] wiec [22:56] to by bylo na tyle jesli chodzi o zapis [22:56] jesli chodzi o odczyt [22:56] a [22:56] jeszcze jedna rzecz [22:56] jesli chodzi o zapis [22:56] fprintf(f, "format", ...) [22:57] identyczne jak printf, tyle ze zapisuje do pliku [22:57] ;> [22:57] ok [22:57] lecimy dalej [22:57] odczyt [22:57] po pierwsze, fgets [22:57] char *fgets(char *s, int size, FILE *stream); [22:57] unhandled exception ;p [22:57] odczytuje z pliku "stream" size bajtow do "s" [22:58] http://gynvael.vexillium.org/gk9_2.c [22:58] tam jest przyklad uzycia [22:58] a [22:58] on odczytuje dokladnie jedna LINIE [22:58] idem spac tzn od miejsca gdzie w pliku jest obecnie wskaznik, do pierwszego \n [22:58] pa d0b0c0p [22:58] odczytuje lacznie z \n ;> [22:59] na koncu odczytanej linii dodaje \0 [22:59] z tym ze nie odczutuje wiecej niz "size" bajtow [22:59] funkcja przeciwna do fwrite jest fread [22:59] size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); [23:00] dziala analogicznie jak fwrite [23:00] z tym ze nie zapisuje [23:00] <^a1^> przeciwna to unlink ;) [23:00] a odczytuje [23:00] ^a1^: ;pppppppp [23:00] ^a1^: to zalezy na ktora plaszczyzne paczec [23:00] ;> [23:00] ok [23:00] potem jest [23:00] int fscanf(FILE *stream, const char *format, ...); [23:01] to jest w sumie funkcja kombajn [23:01] jak fprintf [23:01] Gynvael: jak wyglada f. fread czy tam fgets [23:01] co w nawiasach [23:01] Blizzard: ? [23:01] 5size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); [23:01] Blizzard: bylo wyzej --; [23:01] napisane ;] [23:02] ok [23:02] i jeszcze jedno pyt. jak mam fputs(zmienna_do_ktorej_wpisalem_lancuch, wskaznik) [23:02] o fscanf w sumie poczytacie sobie hehe (dzisiaj nei chce przedluzac) [23:02] to jak mam dodac do tej zmiennej na koncu \n [23:02] Blizzard: strcat [23:02] Blizzard: bylo na ktorym wykladziq [23:02] ? [23:02] bajty daj, 0x0A,0x0D ;) [23:02] yh [23:03] a nie, to windowsowe, w linie chyba tylko karetka ;p [23:03] cauchy: \n ;> [23:03] Blizzard: ew dopisz \n na koniec pliku [23:03] no \n to nie sa dwa bajty ;] [23:03] Blizzard: fputc('\n', f); [23:03] ale zreszta co ja tam wiem ;p [23:03] cauchy: dla windy bywa ze 2 ;p [23:04] cauchy: pod winda jesli nie otworzysz pliku jako binarny [23:04] cauchy: i zrobisz fputs("\n", f) [23:04] no vc daje 2 bajty, cr lf ale php juz nie ;] [23:04] cauchy: to on zapisze 2 (slownie: dwa) bajty [23:04] cauchy: bo php jest kochane i ma gdzies billa g. i jego pomysly [23:04] bo ms lubi marnowac miejsce ;] [23:05] yep [23:05] Producnci dyskow twardych zaplacili dal microsoftu [23:05] (ehehe cauchy widziales jak .bmp jest zbudowane ?;p apropo marnowania miejsca ;p) [23:05] taa ;p [23:05] ok [23:05] dalej [23:05] sa jeszcze dwie funkcje [23:06] ftell i fseek [23:06] ftell(f) zwraca offset od poczatku pliku gdzie teraz znajduje sie wskaznik [23:06] int fseek(FILE *stream, long offset, int whence); [23:06] a fseek idize w podane miejsce [23:06] jako "whence" mozna mu podac: [23:06] SEEK_SET - idz na wskazany offset [23:07] SEEK_CUR - przesun wskaznik o "offset" bajtow do przodu (offset moze byc ujemne, wtedy przesuwa do tylu) [23:07] SEEK_END - idz na koneic pliku (ZA ostatni bajt) [23:07] fajnym sposobem sprawdzenia wielkosci pliku (majac FILE *f) [23:07] jest zroviebie [23:07] (ofc majac plik otwarty (do odczytu)) [23:08] int tmp, wielkosc = 0; [23:08] tmp = ftell(f); // pobieramy aktualna pozycje [23:08] fseek(f, 0, SEEK_END); // idziemy na koneic pliku [23:08] wielkosc = ftell(f); // pobieramy aktualna pozycje, jako ze jestesmy po ostatnim bajcie, to pozycja == wielkosc pliku [23:09] fseek(f, tmp, SEEK_SET); // wracamy na poprzednia pozycje [23:10] ok [23:10] teraz tak [23:10] na dzisiaj koniec, jeszcze tylko pytanka [23:10] i jeszcze powiem co dalej [23:10] teraz tak [23:10] z uwagi na to [23:10] ze troche osob mnie prosilo o kurs asma [23:10] (mimo ze z asma gosu nie jestem) [23:10] to bedzie cos takiego, w poniedzialki [23:10] w srody bedzie normalnie jezyk C [23:11] od tego poniedzialku bedzie asm [23:11] zrob kurs perla ^^ [23:11] tylko poniedzialki ? :> [23:11] mulander: ty zrob ;> ja malo pisalem w perlu [23:11] phoenix__: wstepnie tylko [23:11] co do asma [23:11] e ja cienki programista jestem :> [23:12] no api rox ;p [23:12] (cauchy hehe z asma raczej jestes lepszy niz ja ;>) [23:12] ne tam, co ty mowisz ;) [23:12] ja znam asma dobrze od strony debuggera [23:12] po tym zaczna sie dodatkowe bajerki, czyli [23:12] cauchy: no ja wlasnie tez ;ppp [23:13] 3) dos + debug/nasm - 13h sie klania, i proste efekty graficzne [23:13] jak chcesz codera to wez finsa czy reverenda ;] [23:13] 4) as + linux - czyli skladnia at&t [23:13] hehe 13h to z pascala pamietam ;] [23:13] mov eax,13h [23:13] int 10h czy cos ;] [23:13] 5) jakis tam wstep do pisania systemow operacyjnych [23:13] tyle bedzie o asmie mniej wiecej [23:14] a [23:14] przed 5) bedzie jeszcze 4.5 [23:14] czyli [23:14] 4.5) reverse engineering [23:14] no inzynieria wsteczna ;) [23:14] <^a1^> ;> [23:14] czyli od C do asma is spowrotem [23:14] tyo co jest w asmie najlepsze ;> [23:14] *i [23:15] ok [23:15] teraz pytanka [23:15] *** Gynvael sets mode: -m [23:15] ja nie mam bo zabardzo nic nie kapuje ;P [23:15] a [23:15] *** vircuser [~vircuser@dta38.neoplus.adsl.tpnet.pl] has joined #gynkurs [23:15] za tydzien w srode [23:16] gyn [23:16] pliki ciag dalszy [23:16] zagrasz 2v2? [23:16] czesc vircuser ;> [23:16] vircuser: z nekiem zaraz idziemy 2v2 grac [23:16] no i masz pytanko ;] [23:16] kurwa [23:16] przed momentem mi powiedzial ze ma niemiecki ":/ [23:16] t ogl [23:16] hf [23:16] *** vircuser has quit IRC ("User pushed the X - because it's Xtra, baby") [23:16] :]