HACKING 120% {Hacking, programmazione, computer & molto altro}

[Perl/Linux] Best Useless!!

« Older   Newer »
  Share  
vogy
view post Posted on 14/7/2014, 19:42     +1   -1




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
 
Top
0 replies since 14/7/2014, 19:42   102 views
  Share