WebHU - Programozási kérdések és válaszok

Biztonságos-e egy MATLAB szkriptet önmagából törölni?

A MATLAB-ban a következőket elhelyezhetjük egy me.m nevű szkriptben.

delete('me.m');

Miután futtattuk a szkriptet, eltávolítja magát. Biztonságos az ilyesmi a MATLAB-ban?

14.04.2016

  • Csak azt akartam mondani, hogy ez egy érdekes kérdés, amely felfedi azt a dolgot, amit sokan nem tudnak a MATLAB használatakor. Köszönöm a kérdést! +1 14.04.2016

Válaszok:


1

A szkriptet a MATLAB fordítja le, amikor hívja, a lefordított szkript betöltődik a memóriába, majd a memóriából fut. Ez igaz az osztályokra, függvényekre, szkriptekre és MEX-fájlokra. A inmem segítségével megtekintheti az összes jelenleg elérhető forrásfájl listáját. memóriában tárolva.

Ha törli a forrásfájlt a szkriptből, az továbbra is befejeződik (mivel a memórián belüli verziót használja), de nyilvánvalóan nem lesz újra futtatható.

Ezt magad is láthatod, ha beragasztod egy forgatókönyvbe

%// Prove that we started
disp('About to self destruct')

%// Get the name of the current script
this = mfilename;

%// Remove the source file
delete(which(this))

%// Make sure we actually removed it
if exist(which(this))
    disp('Not deleted')
else
    disp('File is gone!')
end

%// Check that it is still in memory
if any(ismember(this, inmem))
    disp('Still in memory')
else
    disp('Not found in memory')
end

%// Demonstrate that we still execute this
disp('I am unstoppable')

Ha ezután megpróbálja újra futtatni ezt a szkriptet, a program nem fogja megtalálni.

A memóriában tárolt függvényekkel, szkriptekkel stb. A clear segítségével bármikor kifejezetten törölheti őket, vagy törölhet mindent egy specifikus írja be a memóriából.

%// Clear out an explicit script
clear scriptname

%// Clear all functions & scripts
clear functions

Érdekes módon a clear scriptname scriptname.m szkripten belüli meghívása sem akadályozza meg a szkript befejezését.

%// Get the name of the script
this = mfilename;

%// Delete the file
delete(which(this));

%// Try to clear this script from memory
clear(this);

%// Prove that we're still running
disp('Still here')

Egy másik érdekes apróság, hogy a mlock célja, hogy megakadályozza a jelenleg futó függvény/ szkript eltávolítása a memóriából még a befejezés után sem. Ha ezt beszúrja a szkriptbe (a fájl törlése után), a szkript még mindig a inmem használatával jelenik meg a szkript befejezése után, azonban továbbra sem hívhatja meg a szkriptet ismét, mivel a forrásfájl nem található.

this = mfilename;
delete(which(this));
mlock
disp('Still here')

Majd a parancsablakból

%// Run the self-destructing script
scriptname

%// Check to see if it is in memory
ismember('scriptname', inmem)

%// Now try to run it again (will not work)
scriptname

Összegzés

Tehát biztonságos egy szkriptet önmagából törölni? Igen. Úgy tűnik, hogy a forrásfájl törlésével nem tudja megakadályozni, hogy egy jelenleg futó szkript lefusson a befejezésig.

14.04.2016
  • ez azt jelenti, hogy ez biztonságos, ha a szkript nem túl nagy ahhoz, hogy a memóriában elférjen? Ha túl nagy, akkor a MATLAB-nak fokozatosan be kell olvasnia a szkriptet? 14.04.2016
  • @JoeC Biztos vagyok benne, hogy a legtöbb szkript elférne az Apple II memóriájában, de elméleti szempontból valószínűleg a lemezre lapoznák. 14.04.2016
  • Ha a MATLAB szkriptek tolmácsban futnak, akkor azt gondoltam, hogy egy tolmács el tudja olvasni a szkriptet az értelmezés során. A fenti példa szerint az interpreter már átvette a szkriptet, feloldotta a fájlzárolást, és valamilyen közbenső kódon értelmezné? 14.04.2016
  • A MATLAB lényegében lefordítja a szkriptet, és a memóriában tárolja. A clear functions felszabadítja a memóriából, de a fájlzár már a fordítás után eltávolítva. A választ kiegészítem néhány további részlettel. 14.04.2016
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..