Keresés

Részletes keresés

Mütyürke Creative Commons License 2002.09.01 0 0 154
Minden process indulásakor egy fix random poollal indul, ezért a rand függvény alapból mindig ugyanazokat az egymás utáni számokat adja vissza. A megoldás erre az srand függvény, ami egy általad megadott értékre állítja a random poolt. Ha ez az érték (nem megjósolhatóan) kvázi-véletlen, akkor kapod azt, amit szeretnél. Viszonylag jó kvázi-véletlen számot lehet kapni például úgy, hogy a gettimeofday() függvénnyel lekéred az epocs óta eltelt milliomodmásodperceket és xor-olod a processed pid-jével. Valódi véletlenszámokat pedig a /dev/random olvasásával kaphatsz, ezeket a billentyűleütések/egérmozgások/hálókártyainterruptok között eltelt időből kalkulálja ki a kernel.
Előzmény: sechu (146)
Mütyürke Creative Commons License 2002.09.01 0 0 153
A hiba itt van:

argv[i]=="help"

Stringeket c-ben így nem lehet összehasonlítani. A "help" kifejezés egy h,e,l,p,0 byteokat tartalmazó, csak olvasható bytesorozatot fog létrehozni egy, a process számára csak olvasható memóriaterületen, majd pedig a "help" kifejezésekben ennek a helynek a pointere lesz. Az argv[i]=="help" pedig nem akkor lesz igaz, ha az i. argumentum az, hogy "help", hanem akkor, ha ugyanarra a "help"-re mutat. Tehát soha nem lesz igaz, mivel az argv-k pedig írható memóriaterületen vannak.

Ami neked kell, az egy strcmp. (Az strcasecmp még jobb, az nem különböztet meg kis és nagybetűt). Ehhez kell egy #include is. Használata az if-ben: !strcmp(argv[i],"help"). A '!' nem véletlenül kell oda, sajnos a standard libc függvényei néha egy kicsit viccesek :( Itt pl az strcmp akkor lesz igaz, ha a stringek különböznek.

Egyébként a példa progidban a #include mögé kell még egy is, valamint a main-ból a gcc csak return-nal szereti, ha kilépsz (ez utóbbi warningon kívül más bajt általában nem okoz).

Előzmény: sechu (147)
stabbbb Creative Commons License 2002.08.30 0 0 152
:))
Előzmény: NevemTeve (151)
NevemTeve Creative Commons License 2002.08.30 0 0 151
En pedig nagyon szeretek a ksokoban-nal jatszani!
Egyeb topikrombolo hozzaszolasok?!
Előzmény: stabbbb (150)
stabbbb Creative Commons License 2002.08.29 0 0 150
udv

feltennek egy kicsit erdekes kerdest. miszerint titeket erdekelne egy debian logos polo? semmi extra feher polon a logo + a debian felirat.

NevemTeve Creative Commons License 2002.08.29 0 0 149

#include <stdio.h>
#include <string.h>

int main (int argc, char* argv[])
{
int i;

printf("A parancssori argumentumok száma: %d\n\n", argc);
for (i = 0; i < argc; i++) {
printf("Az %d. argumentum %s\n", i, argv[i]);
}

for (i = 1; i < argc; i++) {
if (strcmp (argv[i],"help")==0) {
printf("Segítséget kértél!\n");
}
}
return 0;
}
Előzmény: sechu (147)
NevemTeve Creative Commons License 2002.08.29 0 0 148
Mit szúrok el?

Semmit, csak a srand-ot is meg kell hivni elotte, pl igy: srand (time (NULL));
vagy srand (getpid());

Előzmény: sechu (146)
sechu Creative Commons License 2002.08.29 0 0 147
A parancssori argumentomkat szeretném felhasználni a prgramok (pédál kapcsolók használata). Ám az alábbi kód nem az csinálja amit szeretnék. Vajon mi a baj? Ha a címen lévő értéket (&arv[i]) akarom összehasonlítani akkor azt monja a fordító hogy pointer inttel nem lehet összahasonlítani.

#include

int main (int argc, char* argv[])
{
int i;

printf("A parancssori argumentumok száma: %d\n\n", argc);
for (i = 0; i < argc; i++)
{
printf("Az %d. argumentum %s\n", i, argv[i]);
}

for (i = 0; i < argc; i++)
{
if (argv[i]=="help") {printf("Segítséget kértél!");}
}
}

sechu Creative Commons License 2002.08.29 0 0 146
Kező programozóként véletlen számokat szertnék genrálni 1 és 10 között. A mellékelt kis pogram futásának az eredménye azonban mindig 1. Mit szúrok el? Előre is kösz a helpet!

#include
#include

int main()
{
int i = 0;
i = rand()%10;
printf("A veletlen szam 0 es 10 között: %d\n", i);
return 0;
}

Tis Creative Commons License 2002.08.08 0 0 145
Ok.
kössz szépen, most működik :))
hogy én erre miért nem jöttem rá !!

bye

Előzmény: NevemTeve (144)
NevemTeve Creative Commons License 2002.08.08 0 0 144
VOLT: n=atoi(const char *str);
LETT: n=atoi(str);

Megj: nem hiba, de egyszerubb:
VOLT: char str[5]={'1','2','3','4','\0'};
LETT: char str[]="1234";

Előzmény: Tis (143)
Tis Creative Commons License 2002.08.08 0 0 143
üdv,

Itt a forrrás:

#include <stdio.h>

int main(){
char str[5]={'1','2','3','4','\0'};
int n;
n=atoi(const char *str);
return 0;
}

és a hibaüzenet:

proba.c: In function 'int main ()':
proba.c:6: parse error before 'const'

pedig ez win alatt műxik.
Viszont, ha odaírom a hiányzó int szót:


#include <stdio.h;gt;

int main(){
char str[5]={'1','2','3','4','\0'};
int n;
n=int atoi(const char *str);
return 0;
}

akkor pedig ez a hibaüzenet:

proba.c: In function 'int main ()':
proba.c:6: parse error before 'int'

Nos, ennyi lenne.

Előzmény: NevemTeve (141)
Szeder Creative Commons License 2002.08.08 0 0 142
Egy eszrevetel. Bar a problemat nem oldja meg, de.
libc doksi, arithmetic functions - parsing of numbers - parsing of integers:


- Function: long int atol (const char *STRING)
This function is similar to the `strtol' function with a BASE
argument of `10', except that it need not detect overflow errors.
The `atol' function is provided mostly for compatibility with
existing code; using `strtol' is more robust.

- Function: int atoi (const char *STRING)
This function is like `atol', except that it returns an `int'.
The `atoi' function is also considered obsolete; use `strtol'
instead.


a strtol() pedidg ott van legfelul, PgUp-ra kell picit tenyerelni.

udv,
sz

Előzmény: Tis (140)
NevemTeve Creative Commons License 2002.08.07 0 0 141
Inkabb pasztezd be ide az erintett sort is, meg a hibauzenetet is, mivel biztos hogy te hibaztal (bocs :)
Előzmény: Tis (140)
Tis Creative Commons License 2002.08.07 0 0 140
Sziasztok,

Egy nagyon alap problémám lenne, egy stringben lévő számot szeretnék egésszé konvertálni.
Erre van egy függvény:
int atoi(const char *string);
És ha minden jól ment, akkor a visszatérési értéke az egész szám lesz.
Nos, az a problémám, hogy fogom megkapni a visszatérési értéket.
Mert Windows alatt így működik:
szam=atoi(const char *string);
Viszont Linux alatt reklamál a fordító, hogy lehagytam az elejéről az int szót.

Elég nevetségesnek tűnik, de én még nem jöttem rá :)
Aki tud segíteni, annak előre is köszi.

khiraly Creative Commons License 2002.06.17 0 0 139
Koszonom.

Bar ugy nez ki, hogy ido alapu _is_ a gmon.out keletkezese.

Mert ha varok egy kicsit akkor keletkezik...

Hogy a tobbiek is lassak, hogy milyen nagyszeru program, felraktam egy kepet:

http://khiraly.multimania.com/linux/botom2.png

Kb igy nez ki programom.

Előzmény: NevemTeve (138)
NevemTeve Creative Commons License 2002.06.17 0 0 138
Ez egy pelda akart lenni, amit neked kellett volna a konkret igenyeidhez igazitanod... valahogy igy:

/* valami.c */

#include <setjmp.h>
#include <signal.h>
#include <stdio.h>

sigjmp_buf sjbuf;

void kezelo()
{
signal(SIGINT, kezelo);
printf("Ctrl+C elfogva\n");
siglongjmp(sjbuf, 1);
}

int main (void)
{
signal(SIGINT, kezelo);

if(!sigsetjmp(sjbuf, SIGINT))
printf("Vegtelen ciklus, kilepes Ctrl+D vagy Ctrl+C\n");
else
return 0; /* Ctrl+C */

{int c; while((c=getchar())!=EOF)putchar(c);}
return 0; /* Ctrl+D */
}
Előzmény: khiraly (137)
khiraly Creative Commons License 2002.06.16 0 0 137
hat valahogy nem akar menni:
stdio2out-ra, probalkozhatsz Ctrl+C-vel is;-))
kiirja es kilep.

Mermint mar beraktam a main fuggvenybe.

Utana {} kozott van az eredeti main tartalma.

Meg kene neznem, hogy hogyan kezelik le a nagyobb programok a Control-C t.

BAR EN olyanra gondoltam, hogy a gmon.out folyamatsan keletkezzen, es ahol Control-C-t nyomok addig csinalja meg.

TEHAT a programtol FUGGETLENUL!

Na mind1 meg hegesztgetem..;)

Azert kosz.

Előzmény: chomskyanus (136)
chomskyanus Creative Commons License 2002.06.16 0 0 136
Nem tudom segit-e, de a Ctrl+C elfogasara itt egy kis pl.:


#include
#include
#include

sigjmp_buf sjbuf;

void kezelo()
{
signal(SIGINT, kezelo);
printf("Ctrl+C elfogva\n");
siglongjmp(sjbuf, 1);
}

main()
{
signal(SIGINT, kezelo);

if(!sigsetjmp(sjbuf, SIGINT))
printf("stdio2out-ra, probalkozhatsz Ctrl+C-vel is;-))\n");
else
printf("Hoppa, megint a konzisztens allapotban vagyok!!!\n");

{int c; while((c=getchar())!=EOF)putchar(c);}
// ... ez a program fő feldolgozási ciklusa.
}

Előzmény: khiraly (135)
khiraly Creative Commons License 2002.06.15 0 0 135
Ize megy szepen. Viszont lenne meg vele egy problemam.
Ha a programot(bot) elinditom, akkor az _nem_ lep ki.
Csak Control-C-re. Es ilyenkor nem keletkezik gmon.out.

Tehat valahogy ugy kene megcsinalni, hogy meg lehessen szakitani a futasat.

Mert ha veletlenul megszakadna a szervertol, akkor ujra kapcsolodik.

Tehat most meg vagyok love.

Szoval valahogy ezt kene meg megcsinalnom jol...

Tehat a Control-C hogy tudom megadni ugy, hogy gmon.out is legyen belole?

Koszonom.

Előzmény: NevemTeve (134)
NevemTeve Creative Commons License 2002.06.11 0 0 134
Majdnem jo, de legalabb egy (sajat!) fuggveny­hivasnak is kell lennie a programban, pl:

/* valami.c */

#include <stdio.h>

static int increment (int i)
{
return i+3;
}

int main (void)
{
int i=0;

i= increment (i);
printf("Az i erteke: %d\n", i);
return 0;
}

Igy mar megy
$ gcc -pg -o valami valami.c
$ ./valami # itt keletkezik a gmon.out
$ gprof ./valami # itt hasznalja a gmon.out-ot
Előzmény: khiraly (133)
khiraly Creative Commons License 2002.06.11 0 0 133
_NEM_ debuggolni akarok!!!!!!!!!!!!!!!!!!!
Ennyire nem latszik, amit irtam?

-pg

EZ _ERRE_ valo, tehat hogy szep abrat csinaljak a programbol!

Nem kell debuggolni.

Es _NEM_ object fajl.
A .o az csak egy nev.
Es szerintem eleg vilagosan latszik a parancssorbol, hogy az a _KESZ_ futtathato binaris.

De akkor le irom mashogy:
gcc -pg -oezkeszFuttathatoBinaris valami.c

Ebbol szeretnem megcsinalni azt, hogy A valtozokat, fuggvenyeket, amiket a program meghiv, azt nyomon tudjam kovetni _ABRAN_.

Ehhez a gprof valo. (ne is probaljatok mast bemagyarazni;)

Hogy szep nyomtathato abra legyen: cgprof.

A gond, hogy nem boldogulok vele.

De hogy ne csak mondjam; ilyesmit akarok:
http://boredspy.org/suckbot/prof/suckbot-8-24-01b.jpg

A valami.c ennyi lenne:
#include<stdio.h>
main(){
int i=0;
i+=3;
printf("Az i erteke: %d", i);
}

(Most meg nehogy azzal jojjetek, hogy ezen a programon mit nem ertek...;P)

Ezen az _EGYSZERU_ programon akarom kiprobalni hogy mukodik a gprof, es a cgprof.

Az abra adott. Olyasminek kene keletkezni belole.

Ha mar mukodne, akkor lenne masik programom(kb 10 ezer sor), amit ugynaigy "abrasitani" kene.

Remelem vilagos voltam.

Tehat a program _NEM_ bugzik, nincs semmi baja, csak _EN_ nem ertem nemelyik fuggveny/valtozo szerepet(hany threadet csinal, stb).

Ezert szeretnem abrasitani.

Ezert csinaltam egy egyszeru programot.

Tehat elso lepesben azt kene abrasitani.
Koszonom.

Előzmény: NevemTeve (131)
micu Creative Commons License 2002.06.11 0 0 132
Ha debuggolni akarsz (és nem profile-t csinálni) akkor gcc -g akarmi.c -o akarmi majd ddd akarmi (de Pl. a KDevelop vagy az Anjuta tud IDE-n belül is debuggolni, de a ddd az igazi. Meg van egy kdbg is ami nekem annyira nem jött be, meg egy gvd (gnu visual debugger) ami szintén nem rossz, bár nekem a ddd jött be igazán).
Előzmény: khiraly (130)
NevemTeve Creative Commons License 2002.06.11 0 0 131
Namost debuggolni akarsz, vagy profilirozni?
Debuggolasra a gdb, xxgdb valo.

Egyebkent jol latom, hogy te az objekt modult (valami.o) akarod futtatni? En altalaban a kesz programot szoktam futtatni (abbol ismerszik meg, hogy nincs kiterjesztese).

Előzmény: khiraly (130)
khiraly Creative Commons License 2002.06.11 0 0 130
Na most mar itt nyustolom egy oraja, es nem megy.

Egy fuggvenyt akarok szepen nyomonkovetni(a valtozokat, stb)

gprof -fal elvileg megy.
cgprof meg .ps fajlt csinalna, es rogton grafikus is lenne.

Ezt talaltam:
$ cc -pg -o test_hash test_hash.c
$ test_hash < test_data
$ gprof test_hash | cgprof -Tps | lpr

Namost elso sor megy igy:
gcc -pg -o valami.o valami.c
./valami.o akarmi.data: no such file or dir

gprof valami.o
gmon.out: no such file or direktory

Valaki csinalta mar?/vagy lenne hozza 5letE?

Elore is koszonom.
(es most ez tenyleg surgoss lenne.)

khiraly Creative Commons License 2002.06.08 0 0 129
Megint hamarabb jart a szam/hiba a Makefile-ban.
clean: reszenel nem toroltem a mar leforditott binarist...
ehh...
Előzmény: khiraly (128)
khiraly Creative Commons License 2002.06.08 0 0 128
viszont van egy masik problema yol.
Es ez nagyon zavaro:
Tehat:
gcc valami.o -oakaarmi akarmi.c

Es ha belejavitok a "valami.c" be,
amit elotte igy forgatok le:
gcc -c -ovalami.o valami.c

Akkor nem torli, hanem a var-bol, vagy a tmp-bol vagy a fene tudja honnan
mar _LEFORDITOTT_ programot linkeli hozza a gcc.

Tehat a gondom azzal van, hogy igy nem lehet haladni a fejlesztessel, mert allandoan a regit linkeli hozza.

Hogy lehetne ezt megadni???
Marmint hogy mindig valoban forgassa ujra, es ne a mittomen honnan vbegye?
Mert most nem veszi figyelembe a valami.o-t ...

5let?

Előzmény: khiraly (127)
khiraly Creative Commons License 2002.06.07 0 0 127
ehh, hamar jart a szam. Elneztem egy cuccost jol.

Bocsesz hogy itt nyaggatlak titeket, de egyetemi feladatot lassacskan be kell adni, aztan kezdek parazni....;P

Szal most mar jo. Azert kosz mindenkinek(gondolom csomoan segitettek volna...;)

Előzmény: khiraly (126)
khiraly Creative Commons License 2002.06.07 0 0 126
Na egy oriasi problemam lenne.
Nemtok normalisan megirni egy Makefile-t es nem tudom, hogy mit, es hol csesztem el.
Ez egy kicsit hosszu ide leirni, de ha valakinek lenne egy szabad 5 perce, akkor megnezne?
(atkuldenem neki levelben az egesz programot)
Nem nagy progi vegulis.
Eleg fontos lenne....
Szeder Creative Commons License 2002.06.03 0 0 125
khiraly:

apt-get install glibc-doc

info libc

/waitpid

udv,
sz

Előzmény: khiraly (123)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!