RISOLTO [C] Problema con redirezione da standard output

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.
Ma questo è un problema del file manager e/o dell'editor usato. Se vai da terminale e usi vim o nano, vedrai che te lo apre in ogni caso.
Ho trovato un comportamento alquanto strano della funzione write(credo sia la write), se scrivo meno caratteri di quelli che ho passato come parametro alla write, mi crea un file binario(estensione bin), se scrivo i byte giusti ne uno in più ne uno in meno, mi crea un semplice file di testo(estensione text).
 
Se usi open(), il nome + estensione lo decidi tu, primo parametro.
Il numero di byte da scrivere lo specifichi tu a write(), come terzo parametro. Che vuo. dire "se scrivo di piu o di meno ?
 
Se usi open(), il nome + estensione lo decidi tu, primo parametro.
Il numero di byte da scrivere lo specifichi tu a write(), come terzo parametro. Che vuo. dire "se scrivo di piu o di meno ?
in pratica ho deviato il file descriptor di 1(sdout) sul file descriptor associato al file creato, però quando vado a scrivere tramite la funzione write su stdout, se come secondo parametro della write gli passo meno caratter di quelli specificati e quindi meno byte, mi apre un file binario, se invece passo il giusto numero. mi apre un file dell'estensione da me voluta, non è strano?
 
Ho trovato un comportamento alquanto strano della funzione write(credo sia la write), se scrivo meno caratteri di quelli che ho passato come parametro alla write, mi crea un file binario(estensione bin), se scrivo i byte giusti ne uno in più ne uno in meno, mi crea un semplice file di testo(estensione text).

ma che strano sistema operativo stai usando?? l'estensione la stabilisci tu con la open, non è la write a determinare il contenuto

i file manager purtroppo nascondono le estensioni e usano icone ad hoc per rappresentare i file secondo il tipo che loro hanno identificato...quindi non lasciarti fregare dal file manager

nel caso del tuo codice, ho notato che aggiunge dei simboli non ASCII alla fine della stringa e questo è il motivo per cui i file vengono identificati come binari
 
ma che strano sistema operativo stai usando?? l'estensione la stabilisci tu con la open, non è la write a determinare il contenuto

i file manager purtroppo nascondono le estensioni e usano icone ad hoc per rappresentare i file secondo il tipo che loro hanno identificato...quindi non lasciarti fregare dal file manager

nel caso del tuo codice, ho notato che aggiunge dei simboli non ASCII alla fine della stringa e questo è il motivo per cui i file vengono identificati come binari
sono su Ubuntu 20.10, come dici tu è possibile che il file manager me lo identifichi come un file binario, il fatto e che se lo apro con vim e con nano questo è il risultato:
Codice:
fil^@
che sono quei caratteri alla fine? e la cosa più strana e che se non do come parametro alla write l'esatto numero di byte che ho scpecificato(non in meno come nel file di sopra)mi apre un file binario anche se io lo specificato di formato text.
E questo è il risultato con vim nel caso passo il numero esatto di byte:
Codice:
file_be\0
scrivendo sul file esattamente 8byte(visto che sizeof(arg[1]) è un puntatore), il file magicamente diventa di testo : (
inoltre se mi aggiunge quei caratteri alla fine a mia insaputa come posso toglierli, è un problema questo, ogni volta che creo un file mi aggiunge quei caratteri e ogni volta devo toglierli.
Illuminazione!!!!!! Passando alla write il numero di byte esatti della stringa quei due caratteri finali mi vengono tagliati è il file mi viene identificato come di testo, se invece passo meno caratteri non vengono tagliati e quindi me lo identifica come binario infatti cancellando gli ultimi due caratteri mi viene identificatocome file di testo
 
Ultima modifica:
lasia stare casomai i file manager, verifica il contenuto da console,. con "hexdump -C file"
 
Tu puoi rinominare un file in .txt, ma se ci sono valori binari (< 0x20 e > 128) vedi solo schifezze.

Se vuoi puoi installare "ghex", scegliere il file, rinominarlo .bin, tasto destro, apri con "ghex" e usare sempre lui
 
sono su Ubuntu 20.10, come dici tu è possibile che il file manager me lo identifichi come un file binario, il fatto e che se lo apro con vim e con nano questo è il risultato:
Codice:
fil^@
che sono quei caratteri alla fine?

esattamente quello che dicevo

il file manager vede quei caratteri non ASCII, e ti bolla l'intero file come binario

quei caratteri ovviamente dipendono dalla write

ed è la cosa che avevo specificato qualche post fa, dicendo che c'era una cosa che non andava

e infatti sizeof ti dà la dimensione del puntatore a char, che è sempre 8 bytes sulle cpu a 64 bit...ma tu devi usare strlen per sapere la dimensione della stringa!!!
 
esattamente quello che dicevo

il file manager vede quei caratteri non ASCII, e ti bolla l'intero file come binario

quei caratteri ovviamente dipendono dalla write

ed è la cosa che avevo specificato qualche post fa, dicendo che c'era una cosa che non andava

e infatti sizeof ti dà la dimensione del puntatore a char, che è sempre 8 bytes sulle cpu a 64 bit...ma tu devi usare strlen per sapere la dimensione della stringa
Ma se volessi scrivere meno byte di quelli specificati nella write, non potrò mai farlo, come faccio a togilere quei caratteri?
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top