Hirdetés
- Luck Dragon: Asszociációs játék. :)
- Gurulunk, WAZE?!
- potyautas: A Magyar Néphadsereg emlékére
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- sziku69: Szólánc.
- sziku69: Fűzzük össze a szavakat :)
- GoodSpeed: A RAM-válság és annak lehetséges hatásai
- bambano: Bambanő háza tája
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- gban: Ingyen kellene, de tegnapra
-
LOGOUT

Új hozzászólás Aktív témák
-
emitter
őstag
és egy másik kérdés

nem nagyon értek sajnos a headre-fájlokhoz, ezért fordulok ide:
van ez az sdl_mixer.h [link]
ebben pedig a mixloadmus() fv
extern DECLSPEC Mix_Music * SDLCALL Mix_LoadMUS(const char *file);
viszont mixer.h a beinklúdolt többi headerjében nem igazán találom a fv definícióját... pedig szeretném megnézni, mit csinál pontosan - hol találhatom meg szerintetek ezt?
bocs ha láma a kérdés, és köszi előre is!
ui. egyébként azt akarom megtudni, melyik fv olvassa be - gondolom egy pufferből - a lejátszandó streamet, ugyanis ez az sdl (ha jól láttam) közvetlenül játsza a zenét, nem enged pufferszinten manipulálni - nekem pedig a hálózati átvitelhez pont ez kéne
mod: izé, kicsit utánajártam az előző kérdésemnek
és -lncurses-sel jól efordul, viszont a getch() valami miatt nem működik
nem csinálja azt, amit kéne, még ha utána entert ütök, se..
[Szerkesztve] -
emitter
őstag
getch() miért nem működik nekem linuxon?
olvastam, hogy a curses.h-val meg lehet csinálni, de hogyan...
nekem ilyet ír ki #include ''curses.h'' mellett a getch()-re:
emitter@LAPTOP:~/sdl-talk$ gcc -Wall -lSDL -lSDL_mixer -o mixer-demo mixer-demo.c
/tmp/cc0ENjYn.o: In function `main':
mixer-demo.c
.text+0x86): undefined reference to `stdscr'
mixer-demo.c
.text+0x8f): undefined reference to `wgetch'
collect2: ld returned 1 exit status
milyen opcióval fordítsam, hogy jó legyen?
thx -
emitter
őstag
válasz
emitter
#1536
üzenetére
Úgy látom, mégsem biztos, hogy jó a select() az én helyzetemben, ugyanis ugye minden egyes ciklusiterációban meg kéne néznie a selectnek, hogy éppen melyik socket küld neki adatot (a vezérlő-, vagy az adat-socket), és ha utóbbi küldi, akkor fogadni, belerakni a pufferba, majd újra előlről kezdeni a figyelést... nem lesz ez túl lassú folyamat?
Ezt csak azért kérdezem, mert gőzöm sincs, hogy a processzor szempontjából ez mennyi időt vesz igénybe, nem fog-e egy idő után kiürülni a puffer az ''adatátvitel lassúsága'' miatt
nemtudom, érhető-e a kétségem?
vagy inkább azt a megoldást válasszam, hogy az adatokat becsomagolom, mindig megvizsgálom a fejlécét, és ha vezérlőcsomag érkezik, akkor azalapján döntök a lejátszásról, stb...
melyik lenne a gyorsabb megoldás - vagy mindkettő megfelelő nekem? -
emitter
őstag
válasz
Miracle
#1535
üzenetére
majdnem teljesen igazad van, de most már nem tudok ettől a vállalt feladattól visszalépni, és nem is igazán akarok, valahogy csak kiizzadom
még van idő...
az lehet, hogy a select-nek nincs man-ja a gépemen? (2.6.12 kernel, g++ elfogadja, és működik is a programban), de man select nem működik
kerestem guglin egy csomó helyen a selectnek bármiféle doksiját, de nem találtam semmi jót... szóval ha tudtok, nyugodtan kisegíthettek ilyesmivel
- persze közben még én is tovább keresek -
emitter
őstag
válasz
emitter
#1532
üzenetére
fel!
szóval az elképzelésem mégegyszer a következő:
-kliensprogi wav-játszás közben figyeli a select()-tel a standard inputot, ha mondjuk azt írom, hogy ''pause'', akkor a szervernek küld egy pasue-nek megfelelő vezérlőjelet, mire a szerver leállítja a wav-játszást, stb.
Szóval lenne két socketem, egy vezérlő- és egy adat-socket. Odáig rendben, hogy mind kliens-, mind szerveroldalon kell 1-1 select a fő-ciklusban, a kérdés, hogy konkrétan hogyan valósítsam meg a dolgot...
nem értem pontosan, hogyan is működik a select()... ez itt a baj
-
emitter
őstag
válasz
emitter
#1531
üzenetére
hát nem teljesen világos ez a select:
ha 2 fájlleíró közül akarok selectelni, azt hogyan - szerver- és kliensoldalon is kell 1-1 select?
szerveren (ez fogadja az adatot) readfds, kliensen meg writefds?
a select milyen gyakran nézi meg, hogy melyik bemeneten jött adat?
és egyáltalán szintaktikailag hogyan kell használni? ez így jó lesz:
while(1){
select(sockfd1+1, &readfds, NULL, NULL, NULL);
if(IS_SET(sockfd1, &readfds)){...} //sockfd1 fogad adatot
else{...} //sockfd2 fogad adatot
} -
emitter
őstag
egy folyamat egyszerre csak egy porton tud kommunikálni?
azt szeretném valahogy megoldani, hogy a kliensprogim ne csak a wav-streamet küldje át a szervernek, hanem egyfajta vezérlőjeleket is, amivel tudnám utasítani mondjuk a wav megállítására, új wav lejátszására, stb.
mindezt persze valahogy párhuzamosan kéne megcsinálni, hogy épp lejátszás közben is tudjak más parancsot küldeni a szervernek.. -
emitter
őstag
válasz
emitter
#1515
üzenetére
méretesebb (100kb-nál nagyobb) wavoknál nem jó a lejátszás
a buffer méretét nem sikerül eltalálni. Az a baj, hogy eddig sehol nem találtam normális leírást arról, hogy mekkora is kell legyen a puffer mérete - ami gondolom a mintavételi frekitől/ minták méretétől/ csatornák számától függ.
általában elkezdi lejátszani, és kis idő után - az első puffer kiírása után - elkezd akadozni, recsegni, stb...
most így néz ki a kód: [link]
amúgy és azt sem értem, hogy bármelyik wav végén mindig azt írja ki, hogy ''Hiba fajlolvasas kozben!'' Egy tipp: ez attól lehet, hogy a puffer mérete nem egész-számszorosa a hang-adat méretének, ezért picit hamarabb abbahagyja a lejátszást? Mondjuk ez néha hallható is, hogy nem fejezi be teljesen a wavot.
-
emitter
őstag
válasz
emitter
#1512
üzenetére
tárgytalan a dolog, tényleg nagyon sz@r sorrendben és teljesen összevissza volt leírva a wav-file felépítése
hogy lehet ilyen munkát kiadni valakinek a kezéből
fejből, elméletben írta és soha ki nem próbálta 
úgyhogy most szépen fut a progim, felismeri a wavokat - minden OK!
[link]
most már csak annyi a problámám, hogy a lejátszás végén elég sokáig tart (5-6 mp), míg kilép a progiból... ez vajon mitől lehet?
mégegy dolog: szeretném kibővíteni majd a tudását mp3-ra is, tudtok mondani olyan libet, ami mp3-at tud dekódolni? mert eddig a neten sajna nem sok mindent találtam, persze keresek tovább, de azért ha tudtok kapásból ilyet, az jól jönne
emitter
mod: Jester, köszi szépen az infót, sokat segítettél
ja, a kódom mostantól nem wav2.c, hanem a linkelt
[Szerkesztve] -
emitter
őstag
válasz
emitter
#1511
üzenetére
az mitől lehet, hogy a progim más formátum-hosszt ismer fel egy adott wavnál, mint a 'file' progi

emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ ./wav2 rexi.wav
Begin fileposition: 0
RIFF
10676
WAVE
fmt
format_length: 16
format_tag: 1
channels: 1
sample_rate: 44100
avg_bytes_sec: 44100
block_align: 0
bits_per_sample: 1
...
----------
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ file rexi.wav
rexi.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 8 bit, mono 44100 Hz
----------
és ezáltal persze rosszul is játsza le a rexi.wav-ot..
itt a kibővített kód [link], ugyanis átírtam, hogy ő olvassa ki a wav headerjéből az infókat... mindezt ezen az oldalon találtam: [link]
az az érdekes, hogy az írója szerint a 38.-ik bájttól már jön a wavban a 'data', szóval a hasznos rész, ezzel szemben az én wavomnál csak a 41.-ik bájt az első adatbájt
akkor a maradék 3 bájt mi lehet?
asszem erre az írásra mondtad Jester, hogy nem tudja a fazon, mit is csinál valójában, ez lehet, mert elég zavaros a dolog, pl szerinte köv. sor
fread(&bits_per_sample, sizeof(short), 1, fp); //8 bit or 16 bit file?
egy mintavétel méretét adja meg bitben. Ehhez képest nekem bits_per_sample: 1
mit javítsak a kódon, hogy jól felismerje a wav sample-méretét? -
emitter
őstag
válasz
Jester01
#1510
üzenetére
hát eléggé nehezen tudtam rájönni a megoldásra, de szerencsére megvan a dolog

akkora buffer kell neki, amekkora a mintavét-freki kétszerese (mono 16bit esetben)
szóval most szépen lejátsza a wavokat, viszont lejátszás után ilyeneket ír ki:
write to audio interface failed (Unknown error 44096)
vagy
Szegmens hiba
a kód: [link]
egyébként azt nem nagyon értem, hogy hogyan tudja a wavot úgy lejátszani, hogy csak egyszer fread()-eli, és utána egyszer hívja az snd_pcm_writei()-t
tehát nem is kell az egész köré a while(!feof(wav_handle)) {...}
ezt nem értem
szóval hogyan fér bele a ~44kb-os pufferembe az egész hanganyag??
ui: most felraktam a puffer méretét 88200-ra, így szépen hiba nélkül lefut... viszont így egy nagyobb wav-stream esetében hogyan fogom megoldani tudni a álózaton való átküldést, ha ez egyszerre akarja kinyomni a hangkártyának a puffer tartalmát
... erre mi lehet a megoldás szerinted? -
emitter
őstag
válasz
Jester01
#1508
üzenetére
nem értem ezt a paraméterezést!

pl. van egy PCM 16bit mono 11025Hz-es wavom, ezesetben mit mekkora értékűre állítsak?
snd_pcm_hw_params_set_format (playback_handle, hw_params, SND_PCM_FORMAT_S16_LE)
snd_pcm_hw_params_set_rate_near (playback_handle, hw_params, 11025, 0)
snd_pcm_hw_params_set_channels (playback_handle, hw_params, 2)
snd_pcm_writei (playback_handle, buf, 128)) !=128)
vagy egy másik wavnál: PCM 8bit mono 44100Hz - itt mekkorára állítsam a fentieket?
vagy tudnál adni egy linket, ahol ezek normálisan le vannak vezetve, hogy hova mekkora érték kell?
amúgy lejátsza a cuccot, csak kicsit érdekes hangon/gyorsasággal
és nem hw:0,0-val, hanem csal plughw:0,0-val (ez asszem konvertál, ha nem jók a paraméterek) -
emitter
őstag
válasz
emitter
#1505
üzenetére
nagyon nem vagyok tisztában azzal, hogy végülis egy wavban milyen infó hol található (fejlécre gondolok), és hogy mi történik akkor, ha nem a neki megfelelő paraméterekkel játszom le... ez utóbbiról azt olvastam, h kárt is okozhat akár, szernecsére nekem csak idegesítő zaj jött a hangszórómból

itt találtam egy wav-felépítést: [link]
viszont nekem így néz ki a wav fájlom (eddig kettőt néztem meg, mindkettő fejléce azonos hosszú):
RIFF~DÝ^@^@WAVEfmt ^P^@^@^@^A^@^A^@^Q+^@^@''V^@^@^B^@^P^@data...
szóval a 40.-ik karakternél kezdődnek a tényleges adatok. Egyébként attól, hogy véletlenül a 44. karaktertől kezdem el lejátszani, attól még kéne szólnia, nem? csak legfeljebb ''kicsit'' később kezdve
segítsetek, mert egyedül nem tudok túljutni ezen a dolgon
ui: és arról sem találtam még infót, hogy mekkora buffert ajánlatos fenntartani, ez gondolom megegyezik azzal az adatmérettel, amit egyszerre kiküld a hangkártyának - ez mekkora legyen? próbálkoztam már 1-16384 bájtig, egyik se jött be, csak zümmögés...
mod: a wav fejlécénél ''fmt'' után egy szóköz van, és természetesen az egész fejléc egy sorban van
és felraktam a legújabb wav2.c-t
[Szerkesztve] -
emitter
őstag
válasz
Jester01
#1504
üzenetére
kirrály!!! megszólalt a hangszóróm!
csak az egyetlen dolog ami beárnyékolja az örömömet, hogy végre sikerült hangot lejátszanom - az, hogy csak egy hangon zümmög, valami a bufferral nincs rendben 
megnéznéd a wav2.c-t?
mekkora buffert érdemes foglalni neki, és milyen gyakran érdemes a kártyára küldeni a hangot? -
emitter
őstag
válasz
Jester01
#1498
üzenetére
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ ./wav2 hw:0,0
Szegmens hiba
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ gdb wav2
GNU gdb 6.3-debian
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type ''show copying'' to see the conditions.
There is absolutely no warranty for GDB. Type ''show warranty'' for details.
This GDB was configured as ''i486-linux-gnu''...Using host libthread_db library ''/lib/tls/i686/cmov/libthread_db.so.1''.
(gdb) set args hw:0,0
(gdb) run
Starting program: /home/emitter/BME_nemet/Prog2/Nagyhazi/wav2 hw:0,0
[Thread debugging using libthread_db enabled]
[New Thread -1212152128 (LWP 9322)]
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1212152128 (LWP 9322)]
0xb7ea183c in snd_pcm_hw_param_set_near () from /usr/lib/libasound.so.2
(gdb) bt
#0 0xb7ea183c in snd_pcm_hw_param_set_near () from /usr/lib/libasound.so.2
#1 0xb7e98699 in snd_pcm_hw_params_set_rate_near () from /usr/lib/libasound.so.2
#2 0x08048a59 in main (argc=2, argv=0xbf935a74) at wav2.c:44
(gdb) quit
The program is running. Exit anyway? (y or n) y
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$
a wav2 binárist az elején jó argumentummal indítottam?
mi az hogy szegmens hiba?
neked ez a progi működik?
itt van a jelenlegi wav2.c: [link] -
emitter
őstag
válasz
Jester01
#1496
üzenetére
az a negyedik karakter: id[4] nem

gdb még mindig nem okés
(gdb) set args -Wall -g -lasound -o wav2
(gdb) run gcc wav2.c
Starting program: gcc wav2.c
No executable file specified.
Use the ''file'' or ''exec-file'' command.
(gdb)
???
mit nem csinálok jól?
---
a bedrótozás azt jelenti, hogy megpróbálja a legáltalánosabb paraméterekkel lejátszani a wavot? -
emitter
őstag
válasz
Jester01
#1494
üzenetére
wav1.c:
most tettem a 4 karakter után egy lezáró \0-t is, de most is szegmens hibázik [link]
---
wav2.c:
gdb-t hogyan kell használni? ad egy promptot, oda mit írjak? (előtte -g-vel fordítottam a kódot)
egyébként mit értesz az alatt, hogy nem a wav-ból veszi a paramétereket a progi? ha nem abból, akkor honnan?
szóval ha jól értettem, akkor a snd_pcm_writei elé kell egy fread, ami a bufba beolvassa a wav tartalmát, kivéve az első x (44?) bájtot? -
emitter
őstag
válasz
Jester01
#1492
üzenetére
oké, köszi
már csak 2 warning maradt, azokkal egyelőre nem foglalkozom, viszont az id 4 bájtos karaktertömbbe egyáltalán nem csak az első négy bájt kerül, hanem valami szemét is, ugyanis kiíratva ezt kapom:
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ gcc -Wall -o wav1 wav1.c
wav1.c: In function 'main':
wav1.c:39: warning: pointer targets in passing argument 1 of 'strcmp' differ in signedness
wav1.c:44: warning: pointer targets in passing argument 1 of 'strcmp' differ in signedness
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ ./wav1
RIF˛˘żą˘żŘą˘ż˘^ޡ
Error: not a RIFF file
ahol az id értéke mindig ''RIF...'', azaz az első 3 karakter állandó, utána random szemét
kód: [link]
----
a minimal-playbacknél pedig ez van:
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ ./wav2 hw:0,0
Szegmens hiba
kód: [link]
a lejátszást akkor hogyan oldhatom meg? a végén a for ciklusban kell valamit csinálnom a bufferral - mit is pontosan? melyik fv küldi a buffer tartalmát a hangkártyának? -
emitter
őstag
válasz
Jester01
#1490
üzenetére
de nekem olyan progi kéne, ami _tényleg_ lejátsza a fájlt!
akkor a minimal-playback nem jó, helyette ott van ez a wav-loader [link]
viszont sajna ez is hibákat dob:
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ gcc -Wall -o wav1 wav1.c
wav1.c: In function 'main':
wav1.c:36: warning: pointer targets in passing argument 1 of 'strcmp' differ in signedness
wav1.c:38: warning: passing argument 1 of 'fread' makes pointer from integer without a cast
wav1.c:41: warning: pointer targets in passing argument 1 of 'strcmp' differ in signedness
wav1.c:44: warning: passing argument 1 of 'fread' makes pointer from integer without a cast
wav1.c:45: warning: passing argument 1 of 'fread' makes pointer from integer without a cast
wav1.c:46: warning: passing argument 1 of 'fread' makes pointer from integer without a cast
wav1.c:47: warning: passing argument 1 of 'fread' makes pointer from integer without a cast
wav1.c:48: warning: passing argument 1 of 'fread' makes pointer from integer without a cast
wav1.c:49: warning: passing argument 1 of 'fread' makes pointer from integer without a cast
wav1.c:50: warning: passing argument 1 of 'fread' makes pointer from integer without a cast
itt a kódom: [link]
ha ez a hivatalos kód, akkor miért hibázik ennyit? castoljam az összes kérdéses részt? -
emitter
őstag
válasz
Jester01
#1487
üzenetére
köszi, de sajna az asoundlib.h-ban csak újabb includok vannak, függvények nem... viszont egy (void*) casttal most szépen lefordul, nem warningol, viszont nem tudom, hogy milyen argot adjak meg indításkor:
...
if ((err = snd_pcm_open (&playback_handle, argv[1], SND_PCM_STREAM_PLAYBACK, 0)) < 0) {
fprintf (stderr, ''cannot open audio device %s (%s)\n'',
argv[1],
snd_strerror (err));
exit (1);
...
szóval ezalapján szerinted mit adjak meg neki, és hova írjam, hogy milyen wavot játsszon le? -
emitter
őstag
válasz
Jester01
#1484
üzenetére
a minimal playback program ([link]) kódját próbáltam egy-az-egyben futtatni, és egy sor hibát dobott:
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ gcc -Wall -o wav2 wav2.c
wav2.c:89: warning: return type defaults to 'int'
wav2.c: In function 'main':
wav2.c:127: warning: passing argument 3 of 'snd_pcm_hw_params_set_rate_near' makes pointer from integer without a cast
/tmp/ccIhl5R0.o: In function `main':
wav2.c:(.text+0x34): undefined reference to `snd_pcm_open'
wav2.c:(.text+0x4b): undefined reference to `snd_strerror'
wav2.c:(.text+0x87): undefined reference to `snd_pcm_hw_params_malloc'
wav2.c:(.text+0x9e): undefined reference to `snd_strerror'
wav2.c:(.text+0xd9): undefined reference to `snd_pcm_hw_params_any'
wav2.c:(.text+0xf0): undefined reference to `snd_strerror'
wav2.c:(.text+0x12d): undefined reference to `snd_pcm_hw_params_set_access'
wav2.c:(.text+0x144): undefined reference to `snd_strerror'
wav2.c:(.text+0x181): undefined reference to `snd_pcm_hw_params_set_format'
wav2.c:(.text+0x198): undefined reference to `snd_strerror'
wav2.c:(.text+0x1d7): undefined reference to `snd_pcm_hw_params_set_rate_near'
wav2.c:(.text+0x1ee): undefined reference to `snd_strerror'
wav2.c:(.text+0x22b): undefined reference to `snd_pcm_hw_params_set_channels'
wav2.c:(.text+0x242): undefined reference to `snd_strerror'
wav2.c:(.text+0x27d): undefined reference to `snd_pcm_hw_params'
wav2.c:(.text+0x294): undefined reference to `snd_strerror'
wav2.c:(.text+0x2c8): undefined reference to `snd_pcm_hw_params_free'
wav2.c:(.text+0x2da): undefined reference to `snd_pcm_prepare'
wav2.c:(.text+0x2f1): undefined reference to `snd_strerror'
wav2.c:(.text+0x33a): undefined reference to `snd_pcm_writei'
wav2.c:(.text+0x354): undefined reference to `snd_strerror'
wav2.c:(.text+0x393): undefined reference to `snd_pcm_close'
collect2: ld returned 1 exit status
---
ennek mi lehet az oka? ha int main()-re írom át, akkor is majdnem ugyanezeket dobja
pl. ''passing argument 3 of 'snd_pcm_hw_params_set_rate_near' makes pointer from integer without a cast'' - ha erre a függvényt így hívom, az jó?
snd_pcm_hw_params_set_rate_near (playback_handle, hw_params, (void*)44100, 0)
vagy honnan tudjam, hogy ez a fv milyen típusú mutatót vár 3. arg-ként?
és a többi undefined reference mit jelent?
---------
van egy másik próbálkozásom is, ez alapján: [link]
itt viszont vannak BYTE meg DWORD típusok, amit az ansi C nem ismer... ezek helyett írhatok CHAR, ill. INT típust, vagy ezeknek nem ugyanakkora a méretük?
[Szerkesztve] -
emitter
őstag
válasz
emitter
#1477
üzenetére
átírtam, szerintem most jónak kell már lennie, viszont még mindig az #1477-ben leírt hibát adja

nem is értem ezt a sort:
sa.sa_handler = sigchld_handler;
miközben a fv definíciója ez:
void sigchld_handler(int s){
while(wait(NULL) > 0);
}
hogyan hívhatok egy paraméteres fv-t paraméter nélkül
az az érdekes, hogy ugyanez a fv-hívás működött régebben, mikor még osztály nélkül írtam meg a progit...
szerinted hol a hiba, mit javítsak?
és felraktam a táramra a legújabb server_oop.cpp-t.. -
emitter
őstag
válasz
emitter
#1476
üzenetére
és mégegy hiba, amire nem tudok rájönni:
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ g++ -Wall -o server_oop server_oop.cpp
server_oop.cpp: In member function 'void myConn::buildConn(int, int&, sockaddr_in&)':
server_oop.cpp:71: error: argument of type 'void (myConn:: )(int)' does not match 'void (*)(int)'
ezt erre a sorra dobja:
sa.sa_handler = sigchld_handler; //levag minden halott folyamatot
ez a sor ugyanis a buildConn() fv-ben van, ami a private részben van.
előtte szintén a private részben van egy ilyen fv:
void sigchld_handler(int s){
while(wait(NULL) > 0);
}
amíg nem írtam át a progit osztályosra, addig simán működött a dolog
[Szerkesztve] -
emitter
őstag
válasz
Jester01
#1475
üzenetére
értem, akkor írok destruktort is.
viszont ha nem adom ki a newfd-t, akkor hogyan mondom meg a send()-nek, hogy melyik fd-re üljön?
mod: ja és a mainből a destruktort hogyan kell hívni? ~myConn(); ra hibát dob, viszont sima myConn()-nál honnan tudja, hogy az a destruktor és nem egy arg-nélküli konstruktor?
[Szerkesztve] -
emitter
őstag
válasz
Jester01
#1473
üzenetére
Na, akkor tovább homályosítom a képet:
van egy myConn nevű osztályom:
class myConn{
private:
int newfd; //ezt meg
struct sockaddr_in client_addr; //ezt kell visszadnia majd a tagfv-eknek
void buildConn(){...} //ez a fv végzi a tényleges kapcsolatépítést
public:
myConn(const int srvport){ buildConn(srvport); }
~myConn(); //kell egyáltalán a destruktor???
int getFD(){ return newfd;} // 1. tagfv
sockaddr_in getClientAddr() { return client_addr;} // 2. tagfv
}
ez a vázlat eddig a szintig helyes?
mod: egy kis szintaktikai modding...
[Szerkesztve] -
emitter
őstag
Vááá!!!
Kezdem föladni, pedig nem kéne

Szóval mivel C++ban kell a progimat írnom, osztályba akarom rakni első lépésben a hálózati kapcsolat létrehozását végző kódot. Itt kezdődtek a bajok, amikkel már lassan 2 órája birkózom
Összefoglalom a helyzetet (egyelőre csak a szerver-progi):
-A főprogramban az osztály konstruktorát meghívnám a szerver-portcímével
myConn(const int srvport)
-Az osztálynak vissza kéne adnia valamilyen módon a főproginak a fájlleírót (hogy aztán tudjak vele send-elni, recv-elni), valamint esetleg a kliens sockaddr_in struktúráját, ez utóbbi nem annyira lényeges
Egyelőre nem akarom belinkelni a kódot, mert még kiröhögtök, de sajna még nagyon nem vágom az osztályokat, csak most kezdtük el... hasonlóan állok a refernciákkal is
Szóval várnám a javaslatokat, hogyan érdemes megoldani a vázolt feladatot: milyen módon adjak vissza a főproginak változókat/értékeket...
Előre is köszi!
emitter -
emitter
őstag
válasz
Jester01
#1463
üzenetére
ja, hogy így kell hívni a length()-et
ez nem jött le a prototípusából 
namind1
szóval, most van egy string s; cuccom, és ebbe getline-nal olvasok.
s.length() okés. viszont:
if(send(sockfd, s, s.length(), 0) == -1){
...
erre a fordító:
client.cpp:64: error: cannot convert 'std::string' to 'const void*' for argument '2' to 'ssize_t send(int, const void*, size_t, int)'
???
send() sem c++ függvény?
mod: igen, mind3-at behúztam
#include <iostream>
#include <string>
using namespace std;
[Szerkesztve] -
emitter
őstag
válasz
Jester01
#1461
üzenetére
jó, akkor átállok C++ valid függvényekre
első érdekesség: annak ellenére, hogy beinklúdoltam <string>-et, a g++ hibát dob, hogy length(), és size() was not declared in this scope... 
pl így hívtam a size-t:
size(buf) //ahol buf char* típusú, de string típusúnál is ugyanezt dobja
mod: ja, és nem tudsz ajánlani egy jó kis c++ referenciát? mert a cpprefernce.com sokszor elég szűkszavú, meg számomra nem mindig egyértelmű
pl ez is: [link]
>> size_type length() const;
itt most a length mit vár? mi az a const uána
[Szerkesztve] -
emitter
őstag
válasz
Jester01
#1459
üzenetére
értem. én egyelőre a <string.h>-t inklúdoltam, akkor gondolom majd nyávog a fordító, ha abban nincs benne valami, ami a string-ben megvan már...
getline-t én is néztem már, de az meg string típusba olvas be, és azt nem tudom konvertálni char*-ba, pedig sok függvény meg csak char*-t fogad el
mi akkor a megoldás?
mod: ja még1: ha üres ENTER-t akarok érzékelin mondjuk arra, hogy ha egy chatprogiban az egyik fél üres entert nyom, akkor bezáródjon a beszélgetés, szóval akkor ezt hogyan tegyem? ilyenkor a buf változó értéke (amibe beolvasom a sztringet), mit tartalmaz? \n-t vagy \r-t, vagy mit?
[Szerkesztve] -
emitter
őstag
válasz
emitter
#1457
üzenetére
az mitől van, hogy a cin egy sztring beolvasásánál a szóköznél kettévágja azt, és elég furcsa dolgokat művel

while(1){
cout << ''> '';
cin >> buf;
cout << buf;
cout << ''\nstrlen(buf): '' << strlen(buf) <<endl;
if(send(sockfd, buf, strlen(buf), 0) == -1){
perror(''send'');
exit(1);
}
}
ez a kérdéses kódom, és ezt írja ki:
> ki vagy?
ki
strlen(buf): 2
> vagy?
strlen(buf): 5
>
mintha a stdin-bemeneti puffert nem űrítené a szóköz beolvasása után, 2x fut le a ciklus, mire kiürül a puffer...
mivel tudnék segíteni a dolgon? (fflush(stdin)-re semmit nem csinál)
szóval azt szeretném ha szóközös sztringeket egybe venné
thx
mod: még annyit kérdeznék, hogy #include-nál C++ban mikor kell '''' közé és mikor <> közé rakni a libet: pl. ha a string libet akarom behúzni, azt hogyan kell helyesen? Tudom, h a C-s módszert is elfogadja, de én szeretnék teljesen C++valid lenni
[Szerkesztve] -
emitter
őstag
válasz
Jester01
#1454
üzenetére
hehe, régen volt... de miért is nem jó ez a castolás?
ign, megnéztem, nem castolja át
int MYPORT = atoi(argv[1]);
így már jó a myport értéke, de a kliens még mindig nem csatlakozik... lehet, h vmi tűzfal-féleség megfogja? Sima ubuntum van, nem állítottam be semmiféle tűzfalat... igaz, egy routeren keresztül netezek, de a localhost kérés nem megy ki a routerig, vagy igen? -
emitter
őstag
válasz
Jester01
#1452
üzenetére
nemjó
Connection refused.
miért fájt ez a myportos sor
oké, sin_size mostantól socklen_t, de nem ez volt a hiba
mondom, az az érdekes, hogy netstat nem látja hallgatózni a server-t
(amúgy ha a servert háttérben futtatom - &-vel, akkor utána hogyan tudok kilépni belőle - kill nélkül?)
mod: és frissítettem a kódokat is a neten
[Szerkesztve] -
emitter
őstag
válasz
Jester01
#1450
üzenetére
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ nc 127.0.0.1 9999
(UNKNOWN) [127.0.0.1] 9999 (?) : Connection refused
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ nc LAPTOP 9999
localhost.localdomain [127.0.0.1] 9999 (?) : Connection refused
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ ./client LAPTOP 9999
connect: Connection refused
és itt a két forráskód, server.cpp: [link]client.cpp: [link]
egyébként a gcc nem tud c++t fordítani, vagy rosszul tudom? és a g++ fordító nekem nem sírt, amikor a precedenciás-részt fordította... neked hogyhogy lefordult gcc-vel?
most átírtam mindent ahogy mondtad, zárójel nélkülire, de ugyanaz a helyzet. Az az érdekes, h netstat -l nem látja a server-t, pedig az fut (ps aux), és eljut az accept()-ig, mert ez még kiírja:
Halott folyamatok eldobva.
mind2 rész a 9999-es portot használja, (a kliens szintén, így, amit néztél kódot, még lehet, h egy régebbi verzió volt)
akkor a socklen_t-s részt hogyan csináljam? sin_size-t longintként hozzam létre, és úgy castoljam (socklen_t*)-vel
köszi, hogy segítesz! -
emitter
őstag
válasz
emitter
#1447
üzenetére
valszeg a localhost miatt van a hiba, de miért???
a beej leírása szerint simán kéne menni egyazon gépen mind2 proginak (külön ablakból indítottam őket)
a szerver eljut az accept-ig, ott várakozik a kérésekre
a kliens viszont sajnos Connection refused-t dob
akár LAPTOP-ot írok hostként, akár 192.168.1.2-t, akár 127.0.0.1-t... -
emitter
őstag
válasz
emitter
#1446
üzenetére
nagy nehezen tájöttem a hibára:
if( sockfd = socket(AF_INET, SOCK_STREAM, 0) == -1){...
a sockfd-s kifejezést még külön be kellett zárójelezni... de hogy miért
-------------
közben újabb hiba, a szervert elindítva ugyanarról a gépről nem tudok rácsatlakozni
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ telnet LAPTOP 9999
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$
vagy
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ ./client LAPTOP 9999
connect: Connection refused
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$
ezek vajon miért
ja, természetesen előtte elindítottam a szervert:
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ ./server 9999
Listening...
[Szerkesztve] -
emitter
őstag
válasz
emitter
#1445
üzenetére
megint nem gondolkoztam mielőtt írtam: csak konvertálnom kellett (socklen_t*)-vel

viszont most újabb hiba jön futtatáskor, amivel már tényleg nem tudok mit kezdeni:
bind: Socket operation on non-socket
a server.cpp-t felnyomtam ide: [link]
ha a setsockopt()-ot bennhagyom (most ki van kommentezve), akkor is ugyanezt a hibát adja, csak bind helyett setsockopt-ra
-
emitter
őstag
if(newfd = accept(sockfd, (struct sockaddr *)&client_addr, &sin_size) == -1){
perror(''accept'');
exit(1);
}
erre miért dobja a g++, hogy:
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ g++ -o server server.cpp
server.cpp: In function 'int main()':
server.cpp:75: error: invalid conversion from 'int*' to 'socklen_t*'
server.cpp:75: error: initializing argument 3 of 'int accept(int, sockaddr*, socklen_t*)'
ezt egy az egyben a 'Beej útmutatója a hálózati programozáshoz' c. irományból szedtem ki, nem értem mit problémázik
egyébként ilyen típusúak a kérdéses változók:
...
int sockfd, newfd;
int sin_size;
struct sockaddr_in client_addr;
... -
emitter
őstag
Szeretnék csinálni első lépésben egy kliens-szerver párost, localhoston kéne beszélgetniük, Linuxon.
Hogyan kell megírnom a szervert? Értem ezalatt, hogy csak hallgatózzon és ha jön egy kérés, akkor kapcsolódjon össze a kleinssel, vagy csak egy bizonyos porton várjon egy adott ip-ről kéréseket? A kliens pedig tudván előre a szerver ip-jét és portját, simán connect()-tel kapcsolódjon hozzá? Stream socketet használok.
Ha a szerver csak hallgatózik, akkor hogyan tudom megállapítani, hogy a csatlakozó kliens tényleg a várt ügyfél, nem pedig egy ''betörő''?
(A progim (wav-streamet küldenék lejátszásra a szervermek) később úgy lenne használatos, hogy mondjuk megadhatom én a kliensen a szerver ip-jét és nyitott portját, majd erre kapcsolódok. Vagy szerintetek ne így csináljam meg a dolgot?)
Köszi!
mod: Vagy én tudom rosszul, és a szerver csak hallgatózva tud a klienshez kapcsolódni, szóval connect()-tel nem?
[Szerkesztve] -
emitter
őstag
mivel érdemes linuxon a hangot kezelni? openAL api? (egyelőre csak wavot akarnék lejátszani, de nem tudom, hol, mivel kezdjem
)
köcce -
emitter
őstag
válasz
Miracle
#1410
üzenetére
köszi

rendben, hogy a wav meg a socket is stream, de ez azt is jelenti, hogy nem tud adat elveszni, vagy lemaradni? mert olvastam a beej írásában, hogy lehet, h nem tud annyi adatot egy ciklusban átnyomni, amennyit én akarnék, így nekem kell ellenőrizni, hogy minden megérkezett-e. ez fennáll sock-stream esetében is, vagy csak a datagramnál? -
emitter
őstag
hi all!
elkezdtem olvasgatni hálózatos témában, c4-eXp által javasolt irományt nézegettem (őszintén megmondom, a magyarsága borzasztó a fordításnak, majdnem elment tőle a kedvem, hogy lehet valaki ilyen pocsék helyesírású
) de azért átrágtam magam rajta
szóval: ha én a progimban wav-streamet akarok majd átküldözgetni egy bufferelt kliensnek (mármint hogy a kliensoldalon a vett adatokat bufferelem, és abból nyomom a hangkártyára)
szóval ebben az esetben milyen módot ajánlotok: stream, vagy datagram
és ezen kívül: milyen fv-nyel érdemes küldeni a cuccost: send(), sendto(), write()?
aztán, úgy csináljam a dolgot, hogy nyitok én egy portot a gépen, vagy hagyjam a kernelre a random választást?
az átküldött adatokat érdemes mondjuk md5-tel ellenőrizni (mármint hogy megérkezett-e minden rendben, vagy elvileg nem veszhet el adat?)
bármilyen tapasztalatotok van e témában, kérlek osszátok meg velem!
előre is köszönöm
mod: és mégegy dolog: Linuxon írom az egészet és C++ban kéne (ezt eddig nem is mondtam
) namost nekem csak egy gépemen van linux, azt lehet hogy csak látszólag küldöm a hálózatra a cuccost, hogy ki tudjam próbálni a működőképességét, de valójában mondjuk a saját ip-mre küldöm, így egyazon gépen futhat a kliens és a szerver progi? vagy hogyan oldjam meg ezt 
[Szerkesztve] -
emitter
őstag
válasz
mcmester21
#1405
üzenetére
mod: ez privibe akart menni

[Szerkesztve] -
emitter
őstag
válasz
mcmester21
#1403
üzenetére
írd csak nyugodtan
bár én pl legközelebb csak holnap délután tudok segíteni -
emitter
őstag
válasz
Jester01
#1398
üzenetére
Szép feladat.
De azért nem reménytelen, ugye?
Nem értem, hogy miért különbözőek a két rendszer által küldött streamek... ez nem csak a hangkártyától függ? Mi az a full-duplex hangkártya, és mit csinál?
El tudnád magyarázni, hogy hogyan is fog működni a rendszer?
Szóval milyen formátumban szaladgálnak majd a hangok, hogyan küldöm/fogadom őket, a dolog hálózati része, ilyesmik...
Mire guglizzak rá, hogyan induljak el?
thx
mod: hálózatokhoz, hang-cuccokhoz lövésem sincs
szóval jó lenne valami olvasnivaló 
[Szerkesztve] -
emitter
őstag
Hi!
Ebben a félévben is köll egy prog-beadandót írni (C++), szeretném időben elkezdeni
amire gondoltam, az egy hálózatos zenelejátszó cucc lenne,
de nem akármilyen:
a lényege hogy az A gépen elindítok valamilyen streamet, ezt a progi (a hangkártya kimenetéről?) feldolgozza, átküldi B gépnek hálózaton, majd B gép szépen kinyomja a saját hangkártyájára.
A kérdéseim ezzel kapcsolatban:
-az A gépbe kell-e egyáltalán hangkártya, vagy lehet vmilyen virtuális eszközről leszedni a hangot?
(a progiba nem akarok zenelejátszót integrálni, más progik által keltett hangot akarok vele transzportálni)
-milyen irodalmat tudtok ehhez ajánlani, milyen témaköröknek olvassak utána?
-mennyire nehéz egy ilyen progit úgy megírni, hogy windózos és linuxos gépek között teljes kompatbilitás legyen? Értem ezalatt, hogy - mivel gondolom a proginak 2 részből kell állnia, egy szerver, és egy kliens részből - szóval írnék egy-egy szervert/klienst linuxra és windózra is, akkor ezek gond nélkül tudnának egymással kommunikálni? (windóz-linux)
Ha minden részt szabványos C++ban írok, akkor ezzel a kompatibilitással nem lehet gond, ugye?
Minden észrevételt, jótanácsot örömmel várok!!!
Köszi előre is
-
emitter
őstag
hi!
C++ könyvet keresek, de nem akarok zsákbamacskát venni
tanár az OO-szoftverfejl. c -t ajánlotta, de ezenkívül van még pár. Kérdés, ti melyike(ke)t ajánljátok? (akár 2-t is vennék, ha nagyon dícséritek
)
szal van eddig ez a 2:
[link]
[link]
[link]
vélemények, esetleg tudtok más könyvet ajánlani?
thx
[Szerkesztve] -
emitter
őstag
válasz
Forest_roby
#1366
üzenetére
vagy próbáld meg devc++t
jó C-re is, grafikus fejlesztőkörnyezet, nekem bejött (semmit nem kellett állítani rajta) -
emitter
őstag
válasz
Jester01
#1328
üzenetére
na, így egy fokkal jobb, de a fflush vhogy nem műxik

szóval azt szeretném, h ha nyomok 1 entert, vagy bármilyen más billt, akkor az ne jelenjen meg a képernyőn. Ráadásul most csak az entert érzékeli lenyomásként, a többi karakterre nem írja ki h ''gomnyomas tortent''
emitter@LAPTOP:~$ ./time_select
0
gomnyomas tortent 1
2
gomnyomas tortent 3
gomnyomas tortent 4
gomnyomas tortent 5
6
j7
gomnyomas tortent 8
9
emitter@LAPTOP:~$
vagy nem volt érthető, h mi a hiba
ja és getch()-re parázik, csak getchar-t fogadja el
time_select.c
.text+0xac): undefined reference to `getch'
collect2: ld returned 1 exit status
mod: kód: [link]
[Szerkesztve] -
emitter
őstag
válasz
Mr.gonzales
#1332
üzenetére
hi!
én ezt találtam csak az a baj, h prolog nyelven
talán segít valamiben
[link] -
emitter
őstag
válasz
emitter
#1323
üzenetére
najó elég béna voltam, nem godnolkoztam
szóval müxik, de nem teljesen úgy ahogy én akarom:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/time.h>
int
input_timeout (int filedes, unsigned int seconds)
{
fd_set set;
struct timeval timeout;
/* Initialize the file descriptor set. */
FD_ZERO (&set);
FD_SET (filedes, &set);
/* Initialize the timeout data structure. */
timeout.tv_sec = seconds;
timeout.tv_usec = 0;
// select returns 0 if timeout, 1 if input available, -1 if error.
return select (FD_SETSIZE,
&set, NULL, NULL,
&timeout);
}
int
main (void)
{
int i=0;
while(i<10)
{
if( input_timeout(STDIN_FILENO, 1) )
{
printf(''gomnyomas tortent '');
printf(''%d\n'',i);
i++;
}
else
{
printf(''%d\n'',i);
i++;
}
}
return 0;
}
ugyanis pl. 3 mp-ig várok, ok, számol 3-ig
aztán nyomok 1 entert, ekkor azt kéne kiírnia, h ''gomnyomas tortent 4''
majd kéne tovább számolnia, nem?
ehelyett ezt írja:
gomnyomas tortent 4
gomnyomas tortent 5
gomnyomas tortent 6
gomnyomas tortent 7
gomnyomas tortent 8
gomnyomas tortent 9
és mindezt 1 pillanat alatt, mintha már nem számolna a timeout
mit rontottam el
-
emitter
őstag
válasz
Jester01
#1318
üzenetére
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/time.h>
int
input_timeout (int filedes, unsigned int seconds)
{
fd_set set;
struct timeval timeout;
/* Initialize the file descriptor set. */
FD_ZERO (&set);
FD_SET (filedes, &set);
/* Initialize the timeout data structure. */
timeout.tv_sec = seconds;
timeout.tv_usec = 0;
/*
// select returns 0 if timeout, 1 if input available, -1 if error.
return TEMP_FAILURE_RETRY (select (FD_SETSIZE,
&set, NULL, NULL,
&timeout));
*/
}
int
main (void)
{
fprintf (stderr, ''select returned %d.\n'',
input_timeout (STDIN_FILENO, 9));
return 0;
}
pedig 5-öt ír ki, illetve azt amit megadok neki az input_timeout-nál
azt mondtad h szedjem ki a temp_failure-t, hát kiszedtem, de így meg a select ha jól látom, nem is hívódik meg sehol...
a timeout-ot még mindig nem értem: ez a kód hol számol vissza, mettől, és egyáltalán miért jó nekem ha visszaszámol? Vagy hogyan értelmezzem ezt a timeout-dolgot
-
emitter
őstag
válasz
emitter
#1309
üzenetére
egyébként nem is fordul a példakód, ezt dobja:
emitter@LAPTOP:~$ gcc -Wall -o time_select time_select.c
time_select.c: In function ‘input_timeout’:
time_select.c:21: warning: implicit declaration of function ‘TEMP_FAILURE_RETRY’
/tmp/cck7Ph7m.o: In function `input_timeout':
time_select.c: (.text+0x73): undefined reference to `TEMP_FAILURE_RETRY'
collect2: ld returned 1 exit status
emitter@LAPTOP:~$
mod: auto szmálji-konverzió
[Szerkesztve] -
emitter
őstag
válasz
Jester01
#1307
üzenetére
De ezzel hogyan tudom megvalósítani a ''stoppert''? Ez ha jól értelmeztem a kódot, egy visszaszámláló, nem pedig egy előreszámláló
azonkívül ezt hogyan tudnám beépíteni? Ha ez a visszaszámlálás idejére blokkol minden inputot, akkor addig nem tud a juzer játszani
szóval nem igazán értem, hogy ezzel mit tudok elérni... főként, hogy a forráskód működését sem igazán értem... pl hol az a rész, ahol számol? semmi ciklus nincs benne
szóval még1x: a proginak számolnia és kiírnia kéne az eltelt sec-eket, lehetőség szerint tudjon pause-t is
ha vki tud jobb (vagy egyszerűbb) megoldást, ne tartsa vissza!
egy másik: mi pontosan magyarul a file descriptor, azon kívül, h fájl-leíró vmi
-
emitter
őstag
válasz
emitter
#1299
üzenetére
hát télleg nagyon béna voltam, úgylátszik kicsit elszoktam a kódolástól, de mostantól megint belejövök

szal csak simán át kellett konvertálni int-be a time_t-t
és sikerült megoldani a másodperc-számlálást mindenféle delay nélkül:
#include <time.h>
#include <stdio.h>
int main()
{
int i, kezdo, akt, t;
kezdo=t=(int)time(NULL);
printf(''Kezdo ido: %d\n'',kezdo);
i=0;
while(1)
{
akt=(int)time(NULL);
if(akt!=t)
{
t=akt;
printf(''%d\n'',akt-kezdo);
i++;
}
if(i==5) break;
}
printf(''Press any key!'');
getchar();
return 0;
}
akkor most ezzel a megpróbálom megcsinálni az aknakeresőm idő-számlálóját
mod: Jester01: azért figyeled az 5 századmásodperces hsz-időkülönbségünket
[Szerkesztve] -
emitter
őstag
tom béna vagyok, de már sok helyen kerestem, és nem leltem, szóval:
hogyan tudom a rendszeridőt másodpercekben megkapni?
az 1970 óta eltelt sec-ek kellenének egész formátumban
a time_t time(time_t *timer) valami objektumba rakja az időt sec-ben, de hogyan kell ezt a gyakorlatban használni? sajna nem írtak rá sehol példát
-
emitter
őstag
válasz
Jester01
#1290
üzenetére
jó, csináltam prototípust, működik
1-2 hiba van benne, ami winen nem jelentkezett:
a legbosszantóbb, hogy a rekordoknál nem írja ki legelső rekorder nevét, csak a pálya méretét
[link]
aztán vmi az ascii-kódokkal sincs rendben: [link] csillagokat kéne írnia
meg volt egy érdekes menet is, már mindent feltártam, és mégsem nyertem
[link]
yakuake konzolja ilyet dob, mikor kilépek (gnome-terminálban jól kilép) [link]
viszont a gnome-terminal-lal is van egy kis gond: a kurzor egybeolvad a háttérrel (ez meg yakuake-ben jó) [link]
és az időszámlálóra visszatérve, szerinted nem fog menni a többszálúsággal, akkor viszont máshogy meg lehet csinálni? nagyon szeretném ha lenne ilyen feature benne
-
emitter
őstag
válasz
Jester01
#1287
üzenetére
az egy régi maradány volt, bocs érte, persze régen már átírtam, mikor megbeszéltük ezt...
szóval, kis simításokat elvégezve maradt még 1-2 bug
emitter@LAPTOP:~$ gcc -Wall -funsigned-char -lm -lncurses -I. -o main main.c
In file included from main.c:8:
./wincon.h: In function 'emul_scanf':
./wincon.h:154: warning: implicit declaration of function 'vsscanf'
main.c: In function 'main':
main.c:96: warning: suggest parentheses around assignment used as truth value
main.c:167: warning: suggest parentheses around assignment used as truth value
main.c: In function 'cls':
main.c:537: warning: pointer targets in passing argument 5 of 'FillConsoleOutputCharacter' differ in signedness
main.c:548: warning: pointer targets in passing argument 5 of 'FillConsoleOutputAttribute' differ in signedness
main.c: In function 'aknaz':
main.c:563: warning: unused variable 'temp'
main.c: In function 'feltar':
main.c:686: warning: unused variable 'l'
main.c:686: warning: unused variable 'k'
emitter@LAPTOP:~$
a warningok nem érdekelnek, de pl azt az emul_scanf-et nem értem, h miért parázik tőle
csináltam neki prototípust, úgyis ezt dobja vissza
vsscanf meg nincs deklarálva...
wincon.h: [link]
main.c: [link]
ui: jut eszembe, milyen ftp-klienst tudnál ajánlani, ami gyors és könnyen használható?
mert eddig az uw.hu saját webes ftp-jét használom, ami elég gagyi
-
emitter
őstag
válasz
Jester01
#1285
üzenetére
oké, már sokkal szimpibb a helyzet, de még van mit csiszolni rajta

emitter@LAPTOP:~$ gcc -Wall -funsigned-char -lm -lncurses -I. -o main main.c
In file included from main.c:7:
./wincon.h: In function 'GetConsoleScreenBufferInfo':
./wincon.h:49: warning: implicit declaration of function 'init_curses'
./wincon.h: In function 'emul_scanf':
./wincon.h:151: warning: implicit declaration of function 'vsscanf'
./wincon.h: At top level:
./wincon.h:209: warning: conflicting types for 'init_curses'
./wincon.h:49: warning: previous implicit declaration of 'init_curses' was here
main.c: In function 'main':
main.c:89: warning: suggest parentheses around assignment used as truth value
main.c:170: warning: suggest parentheses around assignment used as truth value
main.c: In function 'aknaz':
main.c:525: warning: unused variable 'temp'
main.c: In function 'feltar':
main.c:648: warning: unused variable 'l'
main.c:648: warning: unused variable 'k'
emitter@LAPTOP:~$ ./main
sh: cls: command not found
Segmentation fault
emitter@LAPTOP:~$
mod: a kódom: [link]
[Szerkesztve] -
emitter
őstag
válasz
Jester01
#1280
üzenetére
bemásoltam a home-ba a wincon.h-t, kiszedtem a kódból az include windows.h-t, és

emitter@LAPTOP:~$ gcc -Wall -funsigned-char -lm -lncurses -I. -o main main.c
In file included from main.c:7:
./wincon.h:2:20: error: curses.h: No such file or directory
In file included from main.c:7:
./wincon.h:15: error: syntax error before '*' token
./wincon.h:15: warning: type defaults to 'int' in declaration of 'curses_root'
./wincon.h:15: warning: data definition has no type or storage class
./wincon.h:17: error: 'COLOR_BLACK' undeclared here (not in a function)
./wincon.h:17: error: 'COLOR_RED' undeclared here (not in a function)
./wincon.h:17: error: 'COLOR_GREEN' undeclared here (not in a function)
./wincon.h:17: error: 'COLOR_YELLOW' undeclared here (not in a function)
./wincon.h:18: error: 'COLOR_BLUE' undeclared here (not in a function)
./wincon.h:18: error: 'COLOR_MAGENTA' undeclared here (not in a function)
./wincon.h:18: error: 'COLOR_CYAN' undeclared here (not in a function)
./wincon.h:18: error: 'COLOR_WHITE' undeclared here (not in a function)
./wincon.h: In function 'SetConsoleCursorPosition':
./wincon.h:32: warning: implicit declaration of function 'move'
./wincon.h: In function 'GetConsoleScreenBufferInfo':
./wincon.h:49: warning: implicit declaration of function 'init_curses'
./wincon.h:50: warning: implicit declaration of function 'getmaxx'
./wincon.h:51: warning: implicit declaration of function 'getmaxy'
./wincon.h: In function 'FillConsoleOutputCharacter':
./wincon.h:69: warning: implicit declaration of function 'addch'
./wincon.h: In function 'SetConsoleTextAttribute':
./wincon.h:89: warning: implicit declaration of function 'attrset'
./wincon.h:89: warning: implicit declaration of function 'COLOR_PAIR'
./wincon.h: In function 'emul_printf':
./wincon.h:103: error: 'va_list' undeclared (first use in this function)
./wincon.h:103: error: (Each undeclared identifier is reported only once
./wincon.h:103: error: for each function it appears in.)
./wincon.h:103: error: syntax error before 'args'
./wincon.h:108: warning: implicit declaration of function 'va_start'
./wincon.h:108: error: 'args' undeclared (first use in this function)
./wincon.h:110: warning: implicit declaration of function 'va_end'
./wincon.h:122: warning: implicit declaration of function 'addnstr'
./wincon.h:128: warning: implicit declaration of function 'attron'
./wincon.h:128: error: 'A_ALTCHARSET' undeclared (first use in this function)
./wincon.h:130: warning: implicit declaration of function 'attroff'
./wincon.h:136: warning: implicit declaration of function 'addstr'
./wincon.h:139: warning: implicit declaration of function 'refresh'
./wincon.h: In function 'emul_scanf':
./wincon.h:146: error: 'va_list' undeclared (first use in this function)
./wincon.h:146: error: syntax error before 'args'
./wincon.h:149: warning: implicit declaration of function 'getstr'
./wincon.h:150: error: 'args' undeclared (first use in this function)
./wincon.h:151: warning: implicit declaration of function 'vsscanf'
./wincon.h: In function 'fgets_wrapper':
./wincon.h:162: warning: implicit declaration of function 'echo'
./wincon.h:163: warning: implicit declaration of function 'getnstr'
./wincon.h:164: warning: implicit declaration of function 'noecho'
./wincon.h: In function 'getch_wrapper':
./wincon.h:175: warning: implicit declaration of function 'getch'
./wincon.h:179: error: 'KEY_UP' undeclared (first use in this function)
./wincon.h:183: error: 'KEY_LEFT' undeclared (first use in this function)
./wincon.h:187: error: 'KEY_RIGHT' undeclared (first use in this function)
./wincon.h:191: error: 'KEY_DOWN' undeclared (first use in this function)
./wincon.h: In function 'end_curses':
./wincon.h:205: warning: implicit declaration of function 'endwin'
./wincon.h: At top level:
./wincon.h:209: warning: conflicting types for 'init_curses'
./wincon.h:49: warning: previous implicit declaration of 'init_curses' was here
./wincon.h: In function 'init_curses':
./wincon.h:213: warning: implicit declaration of function 'initscr'
./wincon.h:213: warning: assignment makes pointer from integer without a cast
./wincon.h:215: warning: implicit declaration of function 'start_color'
./wincon.h:217: warning: implicit declaration of function 'keypad'
./wincon.h:217: error: 'TRUE' undeclared (first use in this function)
./wincon.h:220: warning: implicit declaration of function 'init_pair'
./wincon.h:226: error: 'ACS_VLINE' undeclared (first use in this function)
./wincon.h:227: error: 'ACS_HLINE' undeclared (first use in this function)
./wincon.h:228: error: 'ACS_CKBOARD' undeclared (first use in this function)
./wincon.h:229: error: 'ACS_LLCORNER' undeclared (first use in this function)
./wincon.h:230: error: 'ACS_LRCORNER' undeclared (first use in this function)
./wincon.h:231: error: 'ACS_ULCORNER' undeclared (first use in this function)
./wincon.h:232: error: 'ACS_URCORNER' undeclared (first use in this function)
./wincon.h:233: error: 'ACS_DIAMOND' undeclared (first use in this function)
main.c: In function 'main':
main.c:89: warning: suggest parentheses around assignment used as truth value
main.c:170: warning: suggest parentheses around assignment used as truth value
main.c: In function 'aknaz':
main.c:525: warning: unused variable 'temp'
main.c: In function 'feltar':
main.c:648: warning: unused variable 'l'
main.c:648: warning: unused variable 'k'
emitter@LAPTOP:~$
ez az ncurses micsoda, mert a gcc manjában nem találtam róla semmit
hasonlóképp a -lm mit csinál? -
emitter
őstag
válasz
Jester01
#1278
üzenetére
állat!
mármint hogy nem kell átírni a kódomat
pont neki akartam kezdeni minden necces részletet kiszedni belőle, hát asszem sok munkától szabadítottál meg
köszi
szóval itt ez a wincon.h, akkor ezt hova is másoljam be
illetve a progim használ egy olyat, h windows.h, azzal mi lesz, ja meg a színek, megmaradnak?
és akkor így kell fordítanom majd: make -funsigned-char -lm -lncurses -I main.c
ugye? -
emitter
őstag
hát ezaz, mivel ez a két lib csak win alatt létezik, lévén wines libek
szal mégiscsak az a megoldás, h kiszedem ezeket a kódokat, és legfeljebb így nem használok színeket, meg ilyesmik...
bár Jester azt mondta régebben, h nem kell sokat átírni a kódomon h linuxon is fusson, bizonytalan vagyok...
kár h ő most nincs itt
mod: a kód itt van: [link]
[Szerkesztve] -
emitter
őstag
válasz
Jester01
#1229
üzenetére
szia!
na, végre sikerült mindenből levizsgáznom, most teljes kapacitással tok a progimmal foglalkozni (nomeg a Linuxszal ismerkedni
)
szóval: make main -> [link]
ezek â�� idézőjelek akarnak lenni és a main.c-met akarom fordítani konzolból, mivelhogy a graf. fejlesztőkörnyezetek elszállnak a kódomtól
-
emitter
őstag
válasz
szijartg
#1259
üzenetére
sztem az egy elég jó könyv, nekem is megvan, (a legújabb, 2005-ös, CD-s kiadás)
0-ról kezd, nem feltételez semmi előismeretet
bár nem ismerem még a c++t, de asszem, mivel az egy fejlettebb nyelv c-nél, érdemes előbb a c-vel elkezdeni, télleg, h csak az alapokat megértsd
vagy rosszul gondolom
?
mod: még nem használtam a CD-jét, ki se bontottam
[Szerkesztve] -
emitter
őstag
hát nem vagyok (még
) egy prog-guru, de az az érzésem, hogy elég sokáig tartana végigpróbálgatni egy 128bites szám gyökéig az osztókat (mivel más módszer nem ismeretes erre, mint a próbálgatás)
mert ha olyan gyors lenne az algoritmus, akkor a titkosítások (amik min. 64-128 bittel dolgoznak) könnyen feltörhetők lennének
persze lehet, h rosszul gondolom, akkor majd úgyis kijavít vki
ui: megkérdezhetem, mihez kéne? -
emitter
őstag
válasz
Jester01
#1227
üzenetére
belekukkantottam, de nem lettem okosabbb

én sem tudom, mi az a mingw-s cucc, a forráskódban nincs mingw, esetleg az zavarhatott be, hogy előtte többször is mingw-vel próbáltam uazt a kódot megnyitni, sikertelenül...
de nem értem, miért zavarna ez be, hiszen kdev-vel új projektet nyitottam és beleillesztettem a main.c-t
egyébként projekt nélkül miért nem lehet simán egy .c-t futtatni? -
emitter
őstag
válasz
Jester01
#1225
üzenetére
cd '/home/emitter/aknakereso' && WANT_AUTOCONF_2_5=''1'' WANT_AUTOMAKE_1_6=''1'' make -f Makefile.cvs && cd '/home/emitter/aknakereso' && CC=''i586-mingw32msvc-c'' CXX=''i586-mingw32msvc-c++'' LD=''i586-mingw32msvc-ld'' ''/home/emitter/aknakereso/configure'' && cd '/home/emitter/aknakereso' && WANT_AUTOCONF_2_5=''1'' WANT_AUTOMAKE_1_6=''1'' make -j1
aclocal
autoheader
automake
autoconf
installing -c
checking whether build environment is sane... yes
checking whether make sets $(MAKE)... yes
checking for working aclocal-1.4... found
checking for working autoconf... found
checking for working automake-1.4... found
checking for working autoheader... found
checking for working makeinfo... missing
checking for C++ compiler default output file name...
configure: error: C++ compiler cannot create executables
See `config.log' for more details.
*** Exited with status: 77 ***
futtatáskor még azt is kiírta, hogy nincs Makefile ebben a könyvtárban, ezért először a 'Configure'-t futtatja
ezek után dobta ezt a hibaüzit -
emitter
őstag
feltettem, ez jobb, nem fagy tőle, csak nem tudja futtatni..
cd '/home/emitter/aknakereso' && WANT_AUTOCONF_2_5=''1'' WANT_AUTOMAKE_1_6=''1'' make -f Makefile.cvs && cd '/home/emitter/aknakereso' && CC=''i586-mingw32msvc-c'' CXX=''i586-mingw32msvc-c++'' LD=''i586-mingw32msvc-ld'' ''/home/emitter/aknakereso/configure'' && cd '/home/emitter/aknakereso' && WANT_AUTOCONF_2_5=''1'' WANT_AUTOMAKE_1_6=''1'' make -j1
aclocal
aclocal: configure.in: 8: macro `AM_PROG_LIBTOOL' not found in library
make: *** [all] Error 1
*** Exited with status: 2 ***
mit kell csinálom? a wines libeket hogy tudom helyettesíteni (gondolom azok miatt parázik..)?
a progi itt van fönn: [link] -
emitter
őstag
válasz
Vilmoskorte
#1221
üzenetére
kde is van, de gonme-ot használok inkább
azért leszedem kdevelopot, hátha az nem fagy ki tőle
-
emitter
őstag
hi!
devc++t honnan tudok leszedni linux alá? az oldalán ugyanis csak winest találtam
vagy ha nincs linuxos változat, akkor milyen más progit ajánlotok?
[Szerkesztve] -
emitter
őstag
válasz
Jester01
#1182
üzenetére
A FillConsoleOutputCharacter()-nek hogyan tudom megmondani, h mettől meddig töröljön (azaz '' ''-t írjon)?
Úgy gondoltam, hogy híváskor megadom a kezdő és a végsorokat paraméterként, és akkor csak a két adott sor közti részt törli.
A kezdőpozicionálás könnyű, de azt nem tudom megcsinálni, h csak egy adott sorig töröljön
Gondolom arra nem szép apellálni, hogy csak 80 karakter széles a képernyő
enélkül viszont hogyan? -
emitter
őstag
válasz
Jester01
#1180
üzenetére
hát még mindig az aknakeresőmbe kéne, hogy a játék közben számlálja az eltelt sec-eket, (ki is írja) lehessen esetleg pause-zni, stb. Én is úgy próbáltam, hogy megnézem gyakorta, h eltelt-e már 1 másodperc, de nem sok sikerrel...
time(&t0); //kezdőidő
time(&t1);
for(i=1;i<500000;i++)
{
if(time(&t2)!=t1)
{
time(&t1);
diff=(int) t2-t0;
system(''cls'');
printf(''%d'',diff);
}
} -
emitter
őstag
hi!
tudtok segíteni, hogyan kell ''számlálót'' csinálni? Azt szeretném, hogy egy ciklus minden másodpercben kiírja az aktuális másodpercet, de eddig minden próbálkozásom sikertelen volt...
és nem is találtam eddig sehol ilyenre példaprogit
valami ötlet, trükk erre vonatkozóan?
köszi
-
emitter
őstag
akkor csak 1 év van köztünk

most kezdtem a BME-VIK-en (villanyszak), ráadásul német nyelvű képzésen vagyok![;]](//cdn.rios.hu/dl/s/v1.gif)
nem mondom h könnyű, de kb ilyesmire számítottam, nem ért túl nagy meglepetés
gondolom téged az infó szak érdekelne, (ezt azalapján gondolom, h ha jólláttam, nem 0 a prog tudásod
)
Nálunk villanyon idén indult először C#, eddig Pascalt nyomtak (gondolom a kétszintű képzés miatt kötelező volt átállni így a XXI sz.-ban
)
jövőre C++szal folytatjuk, aztán talán Java jön, ha jól értesültem
Villanyszakon nem tudom milyen a képzés, nálunk a német infósok is C-t tanulnak egyelőre ugyanolyan szinten, de mellette van még vmi más prog-szerű tárgyuk is
osztálytársam az Elte-re ment infóra, eddig nem sok örömöt lelt benne
aztmondta h van 6-féle matekjuk
komoly! mindegyikből vizsga
és most 1. félévben még nem is tanulnak progot
mindenesetre érdekes
Ha több infót szeretnél, ajánlom ezt a topikot: [link]
üdv:
Kristóf
mod: én is megkérdezhetem, hova jártál? akarom mondani hova jársz?
[Szerkesztve]
-
emitter
őstag
válasz
Jester01
#1161
üzenetére
király! megvan a félévi egyetlen 5-ös tárgyam
és ez a prog 
na szal természetesen tanárbácsi ötösre értékelte közös mnkánkat
s mivel a zh-k is jók lettek, megvan a félévi jójegy
végre egy tárgy ami felfelé húzza az átlagom...
mégegyszer köszönöm minden fáradozásodat!
(azért remélem te is jót játszottál vele
) -
emitter
őstag
válasz
Jester01
#1158
üzenetére
ezer köszönet!!! most már minden okés, remélem több számomra megoldhatatlan hiba nem fog felbukkanni...
akkor ha a screenshot alapján jól látom, linux alatt is tudtad futtatni a progit? mármint a színeket jól megjeleníteni? olyan üres téglalap-kurzort hogyan tudsz csinálni?
egyáltalán a kurzor méretén és láthatóságán kívül lehet még vmit állítani rajta? -
emitter
őstag
válasz
Jester01
#1153
üzenetére
Ne haragudj, de nem tudnád tételesen leírni, h hol mit kellene javítanom, mert igazából holnapra már kéne a működőképes progi, és én megpróbáltam kijavítani ahogy írtad, de csak rosszabb lett
Felraktam a ''javított'' változatot.
szerk: a temp változót, amellyel a megjelölt/feltárt mezőket számoltam, az átláthatság és egyértelműség miatt átneveztem mezoszam-ra, és megszabadultam a lépésenkénti egyész pálya-vizsgálástól is, most még az újrarajzolás kihagyásán küzdök...
c4-eXp: zsír az aláírásod
[Szerkesztve]
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
- Apple iPhone 13 Pro 128GB Akku: 86%, Megkímélt, Kártyafüggetlen, Töltővel, Dobozzal, 1 Év Garancia!
- Samsung Galaxy S25 Ultra Titanium Silverblue 6.9 120 Hz Dynamic AMOLED, 200 MP kamera, S Pen,
- Samsung Galaxy Z Fold7 Blue Shadow-12/512 GB Használt, karcmentes Garancia 2028. 09. 03-ig
- Samsung Galaxy Z Fold7 Silver Shadow-karcmentes 100% akku / 34 ciklus Garancia 2028.09. 27-ig
- PlayStation 5 lemezes Ghost of Yotei Black Limitált
- Apple iPhone 16 Pro Max Natural Titanium Titán dizájn, Pro kamera,100% akku,2026. 02. 11
- Apple iPhone X Space Gray Ikonikus dizájn, Face ID, OLED kijelző 64 GB Használt, megkímélt ,100%
- Azonnali készpénzes AMD Radeon RX 6000 sorozat videokártya felvásárlás személyesen/csomagküldéssel
- Bomba ár! Lenovo IdeaPad V130-15IKB: i5-7G I 8GB I 256SSD I 15,6" FHD I Cam I W11 I Garancia!
- ÁRGARANCIA!Épített KomPhone Ryzen 5 5600X 16/32/64GB RAM RX 7600 8GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: ATW Internet Kft.
Város: Budapest
Cég: BroadBit Hungary Kft.
Város: Budakeszi



nem csinálja azt, amit kéne, még ha utána entert ütök, se..
milyen opcióval fordítsam, hogy jó legyen?

- persze közben még én is tovább keresek

fejből, elméletben írta és soha ki nem próbálta
csak az egyetlen dolog ami beárnyékolja az örömömet, hogy végre sikerült hangot lejátszanom - az, hogy csak egy hangon zümmög, valami a bufferral nincs rendben 


tanár az OO-szoftverfejl. c -t ajánlotta, de ezenkívül van még pár. Kérdés, ti melyike(ke)t ajánljátok? (akár 2-t is vennék, ha nagyon dícséritek



