Re: Asembler
On Mon, 18 Nov 1996, Robert Richard George 'reptile' Wal wrote:
> Ludzie, przeciez facet wyraznie sie pytal, jak ma uzyc
> AllocDosObject()
Tak? Mnie sie wydaje, ze on tylko o niej wspomnial, w charakterze
sugestii...
> , bo to jest JEDYNA LEGALNA metoda przydzielania
> miejsca pod rozne struktury dos.library...
Ciekawe, bo ta funkcja jest dostepna dopiero od OS 2.0, a FileInfoBlock to
chyba gdzies od poczatku. Jak wiec nalezalo przydzielac pamiec pod nia w
starszych systemach, np. OS 1.3?
> A po co te jaja z MEMF_PUBLIC??? A niech
> ktos, kto uzywa VMM sprobuje uruchomic taki program, ktory alokuje
> sobie FileInfoBlock na stosie, albo w kodzie programu, z dostepem do
> pamieci wirtualnej... Zycze ladnego GURU...
A ja Ci sugeruje, zebys na przyszlosc sprawdzal to, co piszesz. Oczywiscie
zadnego GURU nie bedzie - VMM nie wymaga, aby pamiec uzywana do
komunikacji miedzyprocesowej miala atrybut MEMF_PUBLIC.
Zasadniczo masz racje: jezeli fragment pamieci jest uzywany przez wiecej
niz jeden proces, powinien byc przydzielony z uzyciem MEMF_PUBLIC. Jezeli
wiec przydzielamy go eksplicite, z uzyciem AllocMem(), to nie zaszkodzi
ten znacznik ustawic - to w koncu (prawie) nic nie kosztuje...
Jednak *wymog*, aby pamiec uzywana do komunikacji miedzyprocesowej byla
MEMF_PUBLIC, bylby paranoja. Na liscie ADE pojawil sie swego czasu
znakomity przyklad:
file=Open("file_name", MODE_OLDFILE);
Calkowicie legalne, co? Ale "file_name" to string, znajdujacy sie w hunku
kodu lub danych, a przydzielanie ich jako MEMF_PUBLIC nie ma oczywiscie
wiekszego sensu. Nazwa pliku jest przekazywana do filesystemu, ktory jest
osobnym procesem. Gdybys wiec chcial byc w zgodzie z ta regula, trzeba by
to zaprogramowac tak:
ptr=AllocMem(strlen("file_name"), MEMF_PUBLIC);
if (!ptr)
abort();
strcpy(ptr, "file_name");
file=Open(ptr, MODE_OLDFILE);
Znasz kogos, kto tak programuje? Ja nie.
/ Kamil Iskra - AMIGA 1200, 68030 50MHz, HDD 1.2 GB, 18 MB RAM \
| iskra@student.uci.agh.edu.pl kiskra@ernie.icslab.agh.edu.pl |
| http://student.uci.agh.edu.pl/~iskra |
\ PGP public key available via Finger or WWW /