OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů
Právě je 22 črc 2018, 07:37

Všechny časy jsou v UTC + 1 hodina




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 55 ]  Přejít na stránku Předchozí  1, 2, 3, 4
Autor Zpráva
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 03 bře 2018, 21:20 
Offline
Profík
Uživatelský avatar

Registrován: 16 bře 2017, 10:36
Příspěvky: 570
Bydliště: Kósek vod Brna
Has thanked: 23 times
Been thanked: 31 times
Pokud se někdo chce naučit assembler, tak ať začne se Z80, tam dizajnéři pracovali hlavou.

_________________
TEMS-49, PMI-80, rep. MK14, ZX81, ZXspectrum+, TI58, MZ-800


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 03 bře 2018, 21:30 
Offline
Radil

Registrován: 27 zář 2014, 22:56
Příspěvky: 399
Has thanked: 329 times
Been thanked: 184 times
Jiiira píše:
Rád bych se zeptal: je v C nějak omezen počet parametrů předávaných programu z příkazové řádky? Jinými slovy, je pro argc definovaná nějaká maximální hodnota?


C-čko předává parametry přes zásobník. Podle mě je tedy omezení ve velikosti zásobníku.

_________________
ZX Spectrum DELTA, D80, XY4150
DOS Programming
OldComp GitHub


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 03 bře 2018, 21:46 
Online
Pan Generální
Uživatelský avatar

Registrován: 18 čer 2013, 19:26
Příspěvky: 2084
Has thanked: 76 times
Been thanked: 288 times
berk píše:
Jiiira píše:
Rád bych se zeptal: je v C nějak omezen počet parametrů předávaných programu z příkazové řádky? Jinými slovy, je pro argc definovaná nějaká maximální hodnota?

C-čko předává parametry přes zásobník. Podle mě je tedy omezení ve velikosti zásobníku.

No, to je otázka... to asi záleží na tom, kdo vlastně vytváří argc a argv - nevytváří je náhodou op. systém při zavádění programu? Totiž, já vidím 2 možnosti: buď je vytváří OS, a pak zapíše na domluvené místo v programu (či na zásobník) jen ukazatele na ně, nebo si je vytváří aplikace, ale pak je otázka, kde je najde, resp. jak jí je OS předá, aby si z nich mohla argc a argv vytvořit...

Takže se nám to transformuje na otázku "Co se děje při zavádění/spouštění programu?" ;) , což tedy určitě závisí na OS, ale taky v tom jaksi tápu... :scratched:

_________________
www.zxsparrow.com


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 03 bře 2018, 22:19 
Offline
Radil

Registrován: 27 zář 2014, 22:56
Příspěvky: 399
Has thanked: 329 times
Been thanked: 184 times
Špatně jsem si to přečetl - myslel jsem že jde o parametry funkce ale ty se ptáš na command line parametry :-(

Vzhledem k typu int argc je to dáno. Velikost intu se může lišit na různých architekturách a je definována v souboru limits.h.

Nicméně tvůj dotaz na maximální počet parametrů je podezřelý a zavání nějakým nevhodným použitím. Pokud chceš předávat větší množství dat v cmd line, tak je možná lepší použít pajpu.

_________________
ZX Spectrum DELTA, D80, XY4150
DOS Programming
OldComp GitHub


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 03 bře 2018, 22:34 
Online
Pan Generální
Uživatelský avatar

Registrován: 18 čer 2013, 19:26
Příspěvky: 2084
Has thanked: 76 times
Been thanked: 288 times
berk píše:
Vzhledem k typu int argc je to dáno. Velikost intu se může lišit na různých architekturách a je definována v souboru limits.h.

Ano, ale o velikost intu mi nejde - to mě napadlo taky - a velikost intu bude určitě dostatečná 8-)

berk píše:
Nicméně tvůj dotaz na maximální počet parametrů je podezřelý a zavání nějakým nevhodným použitím. Pokud chceš předávat větší množství dat v cmd line, tak je možná lepší použít pajpu.

Naopak, já potřebuju vědět, co se dá legitimně očekávat od uživatele, resp. co se mu dá dovolit za počet parametrů... Nebo ještě jinak: jak velké množství parametrů (nad jakým limitem) mu už odmítat ;) . S nějakou hláškou "too many parameters"...

_________________
www.zxsparrow.com


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 03 bře 2018, 22:43 
Offline
Radil

Registrován: 27 zář 2014, 22:56
Příspěvky: 399
Has thanked: 329 times
Been thanked: 184 times
Uživatele limituje délka commanline která závisí na OS

If you are running Windows XP or later, the maximum length of the string that you can use at the command prompt is 8191 characters.
If you are running Microsoft Windows 2000 or Windows NT 4.0, the maximum length of the string that you can use at the command prompt is 2047 characters.

_________________
ZX Spectrum DELTA, D80, XY4150
DOS Programming
OldComp GitHub


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 03 bře 2018, 22:50 
Offline
Radil
Uživatelský avatar

Registrován: 31 srp 2014, 15:27
Příspěvky: 474
Bydliště: Praha
Has thanked: 36 times
Been thanked: 131 times
Jak už bylo napsáno, způsob předávání parametrů nově spuštěnému programu je specifický pro operační systém.

Vytvoření a naplnění argc a argv[] má ale na starosti běhová knihovna pro C. Ta zavolá službu operačního systému a opatří si adresu předaných parametrů. Pak parametry zpracuje (naparsuje) a naplní argc a argv[]. Některé běhové knihovny lze i nastavit tak, aby vždy vracely parametry jako adresu jednoho dlouhého řetězce (typicky nějakým parametrem při spouštění překladače).

Limit na parametry je tedy závislý na více faktorech. Volání operačního systému by žádná drastická omezení klást nemělo. Prostě se předává adresa bloku paměti s parametry. Tam může být limit třeba 4 GiB. Výraznější může být omezení shellu (bash, cmd.exe, explorer.exe). Tam už to může být omezené třeba na 32 KiB nebo 256 KiB.

Také se liší význam nultého parametru (argc[0]). Pod Windows je tam třeba plná cesta ke spuštěnému souboru (to mám moc rád), pod Linuxem tam bývá jen holý příkazový řádek (fuj, jak má pak program zjistit, odkud byl spuštěn...)


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 03 bře 2018, 22:53 
Online
Pan Generální
Uživatelský avatar

Registrován: 18 čer 2013, 19:26
Příspěvky: 2084
Has thanked: 76 times
Been thanked: 288 times
Jo, už tomu začínám rozumět, díky! :thumbup:

_________________
www.zxsparrow.com


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 04 bře 2018, 16:07 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 23 bře 2014, 19:13
Příspěvky: 1399
Has thanked: 56 times
Been thanked: 237 times
Tak jsem zkusil (linux+bash) předat a vypsat 10000 desetipísmenných argumentů, něco přes 100 KB, a prošlo to. Jak z dávkového souboru tak přímo z příkazového řádku. To by pro běžného BFU mělo být dostatečné :)

_________________
Podle §153 Chamurabbiho zákoníku je žena, která nechala zavraždit svého manžela kvůli jinému muži, odsouzena k smrti nabodnutím na kůl.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 04 bře 2018, 18:24 
Offline
Radil
Uživatelský avatar

Registrován: 31 srp 2014, 15:27
Příspěvky: 474
Bydliště: Praha
Has thanked: 36 times
Been thanked: 131 times
faraon píše:
Tak jsem zkusil (linux+bash) předat a vypsat 10000 desetipísmenných argumentů, něco přes 100 KB, a prošlo to. Jak z dávkového souboru tak přímo z příkazového řádku. To by pro běžného BFU mělo být dostatečné :)


Tak zrovna u BASHe by kapacita měla být vysoká. Vzhledem k tomu, že BASH často expanduje zástupné znaky, tak i nevinně vypadající zápis s pár hvězdičkami se může rozrůst na opravdu hodně dlouhý příkazový řádek.


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 55 ]  Přejít na stránku Předchozí  1, 2, 3, 4

Všechny časy jsou v UTC + 1 hodina


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 2 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz