vogy |
|
| Siccome mancava Perl ho voluto rimediare scrivendo qualcosa Il mio più grande problema è stato: Cosa si può fare di *veramente* inutile con Perl? Non è mica che in un secondo si possa inventare qualcosa che non serva assolutamente a nulla, bisogna impegnarsi. Allora ho pensato: 'cosa fa' un vero programma che non serve a un tubo? È un programma che occupa inutilmente spazio e memoria. Right E quindi ho creato il solo e unico PrimoSoftwareAlMondo nato unicamente per non servire a niente! Con questo programma in poche battute di tastiera si può inutilmente occupare spazio su disco e ram a iosa! E fa soltanto quello! Fantastico! CODICE vogy@eve:~$ ./fogna -m 100 100 MB di RAM occupati; [invio] per liberarli... ...liberi. vogy@eve:~$ ./fogna -m 20% 2389 MB di RAM occupati; [invio] per liberarli... ...liberi. vogy@eve:~$ ./fogna -d 300 Operazione conclusa, scrittura su disco 300 MB [invio] per liberare anche il disco, oppure CTRL+C per uscire disco liberato vogy@eve:~$ ./fogna -m 20% -d 5% Operazione conclusa, scrittura su disco 25192 MB 2389 MB di RAM occupati; [invio] per liberarli... ...liberi. [invio] per liberare anche il disco, oppure CTRL+C per uscire disco liberato vogy@eve:~$ È evidente che se volete riempirvi il disco in maniera spropositata dovete attendere un po' per il completamento dell'opera... però poi sono soddisfazioni. P.S.: visto che la grafica del forum scrive in piccolo per una migliore visione sono andato oltre gli 80 caratteri per riga; inoltre siccome mi vergognavo un po' a pubblicare certe mixchxatx ho anche scritto in Italian. So che sono entrambe cose assai disdicevoli e me ne dolgo da solo == Source == CODICE #!/usr/bin/perl -w
# # Riempie RAM e Disco con valori scelti dall'utente, in MB o in % # Usage: # $ perl this_file_name [-d MB/% hd to occupy] [-m MB/% RAM to occupy] #
use strict; use Getopt::Std; our ($opt_d, $opt_m, $hd_perc, $mem_perc, $to_write, $byte, $hf, $mem_file, $occup_mem, $prog_mem, $sys_mem);
sub fs_check { my $hd_perc = $_[0]; if ($hd_perc > 100) { die "Percentuale del disco errata: $hd_perc% > 100%!!\n"; } my $fs_write = `df | grep -P /home\$ | awk '{print \$2" "\$3" "\$4}' | sed 's/%//'`; if ( not $fs_write ) { $fs_write = `df | grep -P /\$ | awk '{print \$2" "\$3" "\$4}' | sed 's/%//'`; } # Please TestMe for /home !! ---------- # print "risultato: $fs_write"; exit; # ------------------------------------- my @fs_data = split /\s+/, "$fs_write"; # $fs_data[0] kb totali # $fs_data[1] kb usati # $fs_data[2] kb liberi
my $max_write = int( $fs_data[2] / 1024 ); # MB my $to_write = int( ($fs_data[0] / 100) * $hd_perc ); if ( $to_write >= $fs_data[2] ) { die "Percentuale del disco maggiore di quella libera! Max: $max_write MB\n"; }
write_file($to_write); } sub write_file { my $to_write = $_[0]; my $byte_wrote = $to_write * 1024; my $mb_wrote = int( $to_write / 1024 ); open my $fh, ">>", "junkfile.fuk" or die "impossibile creare file sul disco!"; for ( my $byte = 0; $byte <= $byte_wrote; $byte++ ) { print $fh "\xf8"; } close $fh; print "Operazione conclusa, scrittura su disco $mb_wrote MB\n"; }
sub mem_calc { my $mem_perc = $_[0]; if ($mem_perc > 100) { die "Percentuale di memoria errata: $mem_perc% > 100%!!\n"; } # match su /proc/meminfo open SYSMEM, '<', '/proc/meminfo' || die "visualizzazione dati errata\n"; my $sys_mem = <SYSMEM>; if ( $sys_mem =~ /^MemTotal:\s+(\d+)\s.*$/ ) { $sys_mem = $1; } else { die "Impossibile visualizzare la memoria disponibile\n"; }
my $new_mem = ( $sys_mem / 100 ) * $mem_perc; my $mem_value = int($new_mem / 1024); memory($mem_value); }
sub memory { my $mem_value = $_[0]; my $change_mem = $mem_value * 1024 * 1024; # bytes open NEWMEM, '>', \$mem_file; seek NEWMEM, $change_mem-1, 0; print NEWMEM chr(0); close NEWMEM; print "$mem_value MB di RAM occupati; [invio] per liberarli..."; <STDIN>; undef $mem_file; print "...liberi.\n"; }
sub usage { die "Usage: $0 [-d MB/% hd to occupy] [-m MB/% RAM to occupy]\n"; }
# main program
my $input_data = $ARGV[0]; unless (defined $input_data) { usage(); } getopts('d:m:') || usage(); my $hd_value = $opt_d; my $mem_value = $opt_m;
if ( $hd_value ) { if ( $hd_value =~ /^(\d+)%$/ ) { # calcolo bytes HD da % my $hd_perc = $1; fs_check($hd_perc); } else { # porto in kb e mando a write_file my $to_write = $hd_value * 1024; write_file($to_write); } }
if ( $mem_value ) { if ( $mem_value =~ /^(\d+)%$/ ) { my $mem_perc = $1; mem_calc($mem_perc); } else { memory($mem_value); } }
if ( $hd_value ) { print "[invio] per liberare anche il disco, oppure CTRL+C per uscire"; <STDIN>; unlink "junkfile.fuk"; die "disco liberato\n"; }
exit;
#EOF Un ringraziamento particolare all'autore di questo fiqissimo script (utile...): www.spec.org/cpu2006/Docs/sysinfo
|
| |