Visit

28 August 2011

file del compito

/* Esercizio 16, creare applicativo in terminale
* scrivere le seguenti funzioni:
* da una stringa, passare la stringa alla rovescio, usare malloc e free
* scrivere una stringa da terminale e dare numero caratteri
* togliere il carattere \n dalla stringa
* leggere il path corrente
* leggere i file della directory corrente, non in ordine
* avere come minimo due file *.h e relativi *.c, avere un file main.c, avere un makefile
* dal makefile avere la possibilità di generare un file *.tar.gz e cancellare i file *.o e l'eseguibile
*/

Main1.c
/* programma test reverse string */
/* non funziona con la localizzasione Italiana, è viene scritto con ??,
* la soluzione la so, ma i soliti sapientoni dei forum\blog di programmazione,
* fanno solo polemiche, nhe'
*
*/
/* Esercizio 16, creare applicativo in terminale
* scrivere le seguenti funzioni:
* da una stringa, passare la stringa alla rovescio, usare malloc e free
* scrivere una stringa da terminale e dare numero caratteri
* togliere il carattere \n dalla stringa
* leggere il path corrente
* leggere i file della directory corrente, non in ordine
* avere come minimo due file *.h e relativi *.c, avere un file main.c, avere un makefile
* dal makefile avere la possibilità di generare un file *.tar.gz e cancellare i file *.o e l'eseguibile
*/

#include
#include
#include
#include
#include
#include
#include
#include
#include "scrivoleggo.h"
#include "reverse.h"

/* int main (int, char **); */

int main (int argc, char **argv)
{
int x = 0;
char a_uno[] = "int main (int argc, char **argv)";

char line[MAX_LINEA];
char miapath[PATH_MAX + 1];

printf ("%s\n", a_uno);
rovescio (a_uno, strlen (a_uno));
printf ("%s\n", a_uno);

strcpy (miapath, leggopath ());
printf ("il mio path %s\n", miapath);
rovescio (miapath, strlen (miapath));
printf ("in reverse: %s\n\n", miapath);

/* per fermare l'immissione dare ctrl C o ctrl D in Linux\freeBSD */
while (getlinea (line, sizeof line) > 1)
{
discardnewline (line);
rovescio (line, strlen (line));
printf("%s\n", line);
}

printf ("\n");
x = leggodirectori ((leggopath ()), 0);

return (0);
}

reverse.h
/* reverse. prova string, header */

#ifndef REVERSE_H
#define REVERSE_H

#define MAX_LINEA 1024

/*
* rovescio, per invertire una stringa o frase
*
* input: stringa da invertire, lunghezza stringa da invertire
* output: stringa invertita
*
*/
char *rovescio (char *, const int );

/*
* cancello il punto a capo (newline '\n')
*
* input: stringa controllo
* output: stringa senza newline
*
*/
void discardnewline (char *);

#endif

reverse.c
/* prova reverse string, funzioni varie */

#include
#include
#include
#include
#include "reverse.h"

char *rovescio (char *s, const int lung)
{
int l = lung,
x = 0;
char *p_dummy; /* puntatore a caratteri per rovesciare la stringa */

/* verifico se vi è abbastanza memoria da allocare */
if(!(p_dummy = malloc (l * sizeof (*p_dummy))))
{
fprintf (stderr,"memoria non allocata"); /* stampo un mess. in stderr su video */
exit (EXIT_FAILURE); /* Esco se ho memoria insufficiente. */
}

--l; /* diminuisco il valore per l'indice, in C partono da zero */
for (x = 0; x < lung; x++) { p_dummy[l] = s[x]; --l; } p_dummy[lung] = '\0'; /* aggiungo la fine stringa */ strcpy (s, p_dummy); /* copio la stringa invertita */ free (p_dummy); /* libero memoria allocata */ return (s); } void discardnewline (char *s) { int i; for(i = 0; s[i] != '\0'; i++) { if(s[i] == '\n') s[i] = '\0'; } }


scrivoleggo.h
/* input wrote read prova string, header */

#ifndef SCRIVOLEGGO_H
#define SCRIVOLEGGO_H

/*
* scrivo la linea con tastiera
*
* input: stringa da scrivere, massima lunghezza linea
* output: numeri caratteri scritti (da K&C book "language C", the bible for me)
*
*/
int getlinea (char *, const int );

/*
* scansiono directory
*
* input: stringa precorso directory da scansionare, valore numero file
* output: numero file scansionati
*
*/
int leggodirectori (char *, int );

char *leggopath (void);

#endif

scrivoleggo.c
/* prova wrote read string, funzioni varie */

#include
#include
#include
#include
#include
#include
#include
#include
#include "scrivoleggo.h"

int getlinea (char *s, const int lim)
{
int c, i;

for(i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i) { s[i] = c; } if(c == '\n') { s[i++] = c; } s[i] = '\0'; return i; } int leggodirectori (char *s, int a) { int x = a; DIR *dir; struct dirent *drent; if((dir = opendir(s)) == NULL) { fprintf(stderr, "Errore opendir()\n"); return EXIT_FAILURE; } while((drent = readdir(dir)) != NULL) { fprintf(stdout, "--> %s\n", drent->d_name);
++x;
}

if(closedir(dir) < 0) { fprintf(stderr, "Errore closedir()\n"); return EXIT_FAILURE; } return (x); } char *leggopath (void) { char *miopath; char miobuff[PATH_MAX + 1]; miopath = getcwd( miobuff, PATH_MAX + 1 ); if( miopath != NULL ) { printf( "My working directory is --<%s>-- done\n", miopath );
}

return (miopath);
}

makefile
# -
# makefile by Erika
# se si ha bisogno della libreria matematica con math.h
# togliere il # davanti a -lm nella linea CFLAGS.
# ricordarsi di cambiare i nomi *.h e *.o, se no contattarmi per avere
# un applicazione(GPL) che leggendo una directory, mette i nomi *.h e *.c
# ricava i nomi *.o dai file *.c (*.cpp) e chiede il compilatore (gcc g++ o altro)
# chiede il nome eseguibile e altro ...
# -
# non la metto tale applicazione(GPL) perchè funziona solo in Linux\freeBSD,
# e dopo tante polemiche con i sapientoni dei vari forum/blog di programmazione
# che si ARRANGINO "loro" i sotutto, nhe', a scuola i proff. hanno detto che va bene ...
# -

CC=gcc
CFLAGS=-Wall -g -pedantic #-lm
STDE=-D_GNU_SOURCE
DEPS = reverse.h scrivoleggo.h
SOURCES := main1.c reverse.c scrivoleggo.c
OBJ = main1.o reverse.o scrivoleggo.o
RM= rm -f
ARCHIVIO := tar -cf
COMPRESSO := gzip
PROGRAMMA := Rovescio

.c.o:
$(CC) -c $(CFLAGS) $(STDE) $(SOURCES) $(DEPS)

all: rovescio

rovescio: $(OBJ)
$(CC) $(OBJ) -o rovescio

.PHONY: clean cleanall tarzippare
clean:
$(RM) -f $(OBJ)

cleanall: clean
$(RM) -f rovescio *.h.gch
# per i file *.h.gch ho dato da terminale: ulimit -c unlimited per il core o gdb core

# creo un file .gz, con i sorgenti
tarzippare: clean cleanall
$(RM) $(PROGRAMMA).tar.gz
$(ARCHIVIO) $(PROGRAMMA).tar $(SOURCES) $(DEPS) makefile
$(COMPRESSO) $(PROGRAMMA).tar



aggiornato il compito

modificato il compito, fatto un nuovo makefile e aggiunto da terminale
[b]ulimit -c unlimited[/b]
per avere il file core o i file *.h.gch per il gdb debug

# -
# makefile by Erika
# se si ha bisogno della libreria matematica con math.h
# togliere il # davanti a -lm nella linea CFLAGS.
# ricordarsi di cambiare i nomi *.h e *.o, se no contattarmi per avere
# un applicazione(GPL) che leggendo una directory, mette i nomi *.h e *.c
# ricava i nomi *.o dai file *.c (*.cpp) e chiede il compilatore (gcc g++ o altro)
# chiede il nome eseguibile e altro ...
# -
# non la metto tale applicazione(GPL) perchè funziona solo in Linux\freeBSD,
# e dopo tante polemiche con i sapientoni dei vari forum/blog di programmazione
# che si ARRANGINO "loro" i sotutto, nhe', a scuola i proff. hanno detto che va bene ...
# -

CC=gcc
CFLAGS=-Wall -g -pedantic #-lm
STDE=-D_GNU_SOURCE
DEPS = reverse.h scrivoleggo.h
SOURCES := main1.c reverse.c scrivoleggo.c
OBJ = main1.o reverse.o scrivoleggo.o
RM= rm -f
ARCHIVIO := tar -cf
COMPRESSO := gzip
PROGRAMMA := Rovescio

.c.o:
$(CC) -c $(CFLAGS) $(STDE) $(SOURCES) $(DEPS)

all: rovescio

rovescio: $(OBJ)
$(CC) $(OBJ) -o rovescio

.PHONY: clean cleanall tarzippare
clean:
$(RM) -f $(OBJ)

cleanall: clean
$(RM) -f rovescio *.h.gch
# per i file *.h.gch ho dato da terminale: ulimit -c unlimited per il core o gdb core

# creo un file .gz, con i sorgenti
tarzippare: clean cleanall
$(RM) $(PROGRAMMA).tar.gz
$(ARCHIVIO) $(PROGRAMMA).tar $(SOURCES) $(DEPS) makefile
$(COMPRESSO) $(PROGRAMMA).tar



23 August 2011

my test for lesson16, C language, Italy comment

my solution

main.c
/* programma test reverse string */
/* non funziona con la localizzasione Italiana, è viene scritto con ??,
* la soluzione la so, ma i soliti sapientoni dei forum\blog di programmazione,
* fanno solo polemiche, nhe'
*
*/
/* Esercizio 16, creare applicativo in terminale
* scrivere le seguenti funzioni:
* da una stringa, passare la stringa alla rovescio, usare malloc e free
* scrivere una stringa da terminale e dare numero caratteri
* togliere il carattere \n dalla stringa
* leggere il path corrente
* leggere i file della directory corrente, non in ordine
* avere come minimo due file *.h e relativi *.c, avere un file main.c, avere un makefile
* dal makefile avere la possibilità di generare un file *.tar.gz e cancellare i file *.o e l'eseguibile
*/

#include
#include
#include
#include
#include
#include
#include
#include
#include "scrivoleggo.h"
#include "reverse.h"

int main (int, char **);

int main (int argc, char **argv)
{
int x = 0;
char a_uno[] = "int main (int argc, char **argv)";

char line[MAX_LINEA];
char miapath[PATH_MAX + 1];

printf ("%s\n", a_uno);
rovescio (a_uno, strlen (a_uno));
printf ("%s\n", a_uno);

strcpy (miapath, leggopath ());
printf ("il mio path %s\n", miapath);
rovescio (miapath, strlen (miapath));
printf ("in reverse: %s\n\n", miapath);

/* per fermare l'immissione dare ctrl C o ctrl D in Linux\freeBSD */
while (getlinea (line, sizeof line) > 1)
{
discardnewline (line);
rovescio (line, strlen (line));
printf("%s\n", line);
}

printf ("\n");
x = leggodirectori ((leggopath ()), 0);

return (0);
}

--------------------------------------------------------------------
reverse.c
/* prova reverse string, funzioni varie */

#include
#include
#include
#include
#include "reverse.h"

char *rovescio (char *s, const int lung)
{
int l = lung,
x = 0;
char *p_dummy; /* puntatore a caratteri per rovesciare la stringa */

/* verifico se vi è abbastanza memoria da allocare */
if(!(p_dummy = malloc (l * sizeof (*p_dummy))))
{
fprintf (stderr,"memoria non allocata"); /* stampo un mess. in stderr su video */
exit (EXIT_FAILURE); /* Esco se ho memoria insufficiente. */
}

--l; /* diminuisco il valore per l'indice, in C partono da zero */
for (x = 0; x < lung; x++) { p_dummy[l] = s[x]; --l; } p_dummy[lung] = '\0'; /* aggiungo la fine stringa */ strcpy (s, p_dummy); /* copio la stringa invertita */ free (p_dummy); /* libero memoria allocata */ return (s); } void discardnewline (char *s) { int i; for(i = 0; s[i] != '\0'; i++) { if(s[i] == '\n') s[i] = '\0'; } } reverse.h /* reverse. prova string, header */ #ifndef REVERSE_H #define REVERSE_H #define MAX_LINEA 1024 /* * rovescio, per invertire una stringa o frase * * input: stringa da invertire, lunghezza stringa da invertire * output: stringa invertita * */ char *rovescio (char *, const int ); /* * cancello il punto a capo (newline '\n') * * input: stringa controllo * output: stringa senza newline * */ void discardnewline (char *); #endif -------------------------------------------------------------------- scrivoleggo.c /* prova wrote read string, funzioni varie */ #include
#include
#include
#include
#include
#include
#include
#include
#include "scrivoleggo.h"

int getlinea (char *s, const int lim)
{
int c, i;

for(i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i) { s[i] = c; } if(c == '\n') { s[i++] = c; } s[i] = '\0'; return i; } int leggodirectori (char *s, int a) { int x = a; DIR *dir; struct dirent *drent; if((dir = opendir(s)) == NULL) { fprintf(stderr, "Errore opendir()\n"); return EXIT_FAILURE; } while((drent = readdir(dir)) != NULL) { fprintf(stdout, "--> %s\n", drent->d_name);
++x;
}

if(closedir(dir) < 0) { fprintf(stderr, "Errore closedir()\n"); return EXIT_FAILURE; } return (x); } char *leggopath (void) { char *miopath; char miobuff[PATH_MAX + 1]; miopath = getcwd( miobuff, PATH_MAX + 1 ); if( miopath != NULL ) { printf( "My working directory is --<%s>-- done\n", miopath );
}

return (miopath);
}

--------------------------------------------------------------------
scrivoleggo.h
/* input wrote read prova string, header */

#ifndef SCRIVOLEGGO_H
#define SCRIVOLEGGO_H

/*
* scrivo la linea con tastiera
*
* input: stringa da scrivere, massima lunghezza linea
* output: numeri caratteri scritti (da K&C book "language C", the bible for me)
*
*/
int getlinea (char *, const int );

/*
* scansiono directory
*
* input: stringa precorso directory da scansionare, valore numero file
* output: numero file scansionati
*
*/
int leggodirectori (char *, int );

char *leggopath (void);

#endif

--------------------------------------------------------------------
makefile
# -
# makefile by Erika
# se si ha bisogno della libreria matematica con math.h
# togliere il # davanti a -lm nella linea CFLAGS.
# ricordarsi di cambiare i nomi *.h e *.o, se no contattarmi per avere
# un applicazione(GPL) che leggendo una directory, mette i nomi *.h e *.c
# ricava i nomi *.o dai file *.c (*.cpp) e chiede il compilatore (gcc g++ o altro)
# chiede il nome eseguibile e altro ...
# -
# non la metto tale applicazione(GPL) perchè funziona solo in Linux\freeBSD,
# e dopo tante polemiche con i sapientoni dei vari forum/blog di programmazione
# che si ARRANGINO "loro" i sotutto, nhe', a scuola i proff. hanno detto che va bene ...
# -

CC=gcc
CFLAGS=-Wall -g -pedantic #-lm
DEPS = reverse.h scrivoleggo.h
SOURCES := main1.c reverse.c scrivoleggo.c
OBJ = main1.o reverse.o scrivoleggo.o
RM= rm -f
ARCHIVIO := tar -cf
COMPRESSO := gzip
PROGRAMMA := Rovescio

%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)

rovescio: $(OBJ)
gcc -o $@ $^ $(CFLAGS)

.PHONY: clean cleanall tarzippare
clean:
$(RM) -f $(OBJ)

cleanall: clean
$(RM) -f rovescio

# creo un file .gz, con i sorgenti
tarzippare: clean cleanall
$(RM) $(PROGRAMMA).tar.gz
$(ARCHIVIO) $(PROGRAMMA).tar $(SOURCES) $(DEPS) makefile
$(COMPRESSO) $(PROGRAMMA).tar


Erika

05 August 2011

Mi resi conto che il computer non è così misterioso come pensavo, anzi vi è anche un divertimento nel suo uso, finalmente usavo il computer con gioia, si impara, si capisce il suo uso...
provai allora ad installare una debian pura, mii che stress ma funzionava, grazie ai vari forum e blog ero riuscita a farla funzionare...
provai una slackware ma dopo tanto cliccare non mi si era installata, poco male, capitai sulle varie fedora gentoo e con nomi esoterici più o meno attraenti, con alcune avevo avuto successo con altre no...
ero pronta per installare la arch, dopo due settimane e qualche notte insonne ci riusci ad installarla, funzionava, che bella esperienza, avevo scritto un libro nero ed ero arrivata a 1200 pagine di come fare su audio net video gnome terminale script e tutti i script della directory /etc/, capire cosa faceva cosa, ma mai più, sono tornata a Mint 8 e gnome ed ero ai settimi cieli...
mi iscrissi anche al forum Mint Italia, un forum amichevole, persone che non se la tirano, aiutano, anche con la semplice simpatia, ero e sono a casa, io che di termini informatici non so niente posso qualche volta aiutare, insomma mi piace partecipare e imparare in questo forum... questo lo devo a Borgio3 che mi ha fatto conoscere questo forum dalle sue guide, non conoscevo Borgio3 e mi ha fatto piacere che le sue guide mi siano state tanto utili...
poi come un imprevisto è arrivata la Mint 9 una LTS, un amore a prima vista, gnome scattante, tutti i miei script e piccole applicazioni funzionanti, l'audio che è una meraviglia, poi per il mio studio tante applicazioni (che vi erano anche con le versioni precedenti) ma più scattanti, senza contare che ero molto più pratica nell'usarlo, insomma mi ero innamorata di mint 9 con gnome …
continuavo sempre a provare anche Ubuntu ma solo per capriccio, più che per utilizzarlo veramente...
mint 10 la mia preferita in fatto di prestazioni. Mint 11 mii che veloce ma la uso poco...
sto provando anche la gnomint mint 11 con gnome 3, una meraviglia, una versione di Pedro, utente moderatore del linux mint italia forum...
con linux e mint sono a nozze, lo capisco e mi capisce, gnome 2 e 3 lo adoro... sto provando anche la versione mint con lxde, un amore meraviglioso, semplice e adorabile da usare, ho provato anche la versione con KDE,
Unix lo sto provando con freeBSD 7.4 release with gnome, lo ho installato e funziona, mii che bello, ma che stress, alcune cose sono diverse da linux, non troppo ma devo imparare ancora...

(continua 1 ...)

02 August 2011

Linux & Unix, per una novizia

ho scoperto Linux e la distribuzione Ubuntu con la versione 9.04, finalmente usare il computer e non essere usata dal PC stesso, per me che passavo ore ad aggiornare e capire il computer con Windows pieno di contraddizioni, allora avevo office comprato e installato, scrivevo con write e usavo execel, ma non passava 10 minuti che mi si apriva finestre di avviso con errori che dovevo aggiornare, scandire con l'antivirus e insomma non potevo fare compiti e studiare, scoprii un browser FireFox che finalmente navigava con meno stress, poi un giorno e dopo l'ennesimo avviso di virus feci una ricerca per poter almeno usare il computer di continuo, arrivai in un forum di ubuntu, termini sconosciuti e diavolerie ma capii che forse era la mia soluzione, misi in download la ubuntu 9.04, la masterizzai e provai a installarla, miracolo, in live funzionava ed aveva openoffice, decisi di installarla, da subito dovevo capire molte cose, ma con l'aiuto dei vari forum e blog ci riuscii, avevo Linux anche io, miracolo, non dovevo preucuparmi dei virus, navigavo senza tanti avvisi e scrivevo e svolgevo le mie formule con soddisfazione, avevo il doppio boot, win e Ubuntu, arrivai al punto che con la Ubuntu 09.10 installai solo Linux, di windows non ne avevo bisogno, non più...
poi con mia sorpresa scoprii un altra distribuzione, la Linux Mint 8, e fu amore a prima vista, veloce, con tutti i driver e codec già caricati all'installazione, continuai ad usare la Ubuntu 09.10 e la Mint 8, con soddisfazione, mi iscrissi a vari forum di Linux, capii tante cose, termini informatici, imparai ad usare come novizia il terminale, scrissi i miei primi script...

(continua)