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?
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?
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
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.
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