RISOLTO [C] Problema con redirezione da standard output

Stato
Discussione chiusa ad ulteriori risposte.

Matteo34

Nuovo Utente
104
3
CPU
i5-10500 3.2Ghz
Dissipatore
Non specificato
Scheda Madre
Non specificata
HDD
M.2 251GB e M.2 500GB
RAM
16GB DDR4 2666mhz
GPU
Grafica Intel® UHD 630
Audio
Non specificata
Monitor
1920x1080 27"
PSU
Non specificato
Case
Non specificato
Periferiche
Nono specificato
Net
Eolo
OS
Ubuntu
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.
Ok grazie, adesso provo
 

Matteo34

Nuovo Utente
104
3
CPU
i5-10500 3.2Ghz
Dissipatore
Non specificato
Scheda Madre
Non specificata
HDD
M.2 251GB e M.2 500GB
RAM
16GB DDR4 2666mhz
GPU
Grafica Intel® UHD 630
Audio
Non specificata
Monitor
1920x1080 27"
PSU
Non specificato
Case
Non specificato
Periferiche
Nono specificato
Net
Eolo
OS
Ubuntu
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).
 
U

Utente cancellato 371741

Ospite
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 ?
 
  • Mi piace
Reazioni: Matteo34

Matteo34

Nuovo Utente
104
3
CPU
i5-10500 3.2Ghz
Dissipatore
Non specificato
Scheda Madre
Non specificata
HDD
M.2 251GB e M.2 500GB
RAM
16GB DDR4 2666mhz
GPU
Grafica Intel® UHD 630
Audio
Non specificata
Monitor
1920x1080 27"
PSU
Non specificato
Case
Non specificato
Periferiche
Nono specificato
Net
Eolo
OS
Ubuntu
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?
 

pabloski

Utente Èlite
2,868
916
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
 
  • Mi piace
Reazioni: Matteo34

Matteo34

Nuovo Utente
104
3
CPU
i5-10500 3.2Ghz
Dissipatore
Non specificato
Scheda Madre
Non specificata
HDD
M.2 251GB e M.2 500GB
RAM
16GB DDR4 2666mhz
GPU
Grafica Intel® UHD 630
Audio
Non specificata
Monitor
1920x1080 27"
PSU
Non specificato
Case
Non specificato
Periferiche
Nono specificato
Net
Eolo
OS
Ubuntu
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:
U

Utente cancellato 371741

Ospite
lasia stare casomai i file manager, verifica il contenuto da console,. con "hexdump -C file"
 
  • Mi piace
Reazioni: Matteo34

Matteo34

Nuovo Utente
104
3
CPU
i5-10500 3.2Ghz
Dissipatore
Non specificato
Scheda Madre
Non specificata
HDD
M.2 251GB e M.2 500GB
RAM
16GB DDR4 2666mhz
GPU
Grafica Intel® UHD 630
Audio
Non specificata
Monitor
1920x1080 27"
PSU
Non specificato
Case
Non specificato
Periferiche
Nono specificato
Net
Eolo
OS
Ubuntu
lasia stare casomai i file manager, verifica il contenuto da console,. con "hexdump -C file"
Già fatto mi esce la stringa tradotta in esadecimale, per io problema e che il vorrei aprirlo come un normale file
 
U

Utente cancellato 371741

Ospite
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
 

pabloski

Utente Èlite
2,868
916
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!!!
 

Matteo34

Nuovo Utente
104
3
CPU
i5-10500 3.2Ghz
Dissipatore
Non specificato
Scheda Madre
Non specificata
HDD
M.2 251GB e M.2 500GB
RAM
16GB DDR4 2666mhz
GPU
Grafica Intel® UHD 630
Audio
Non specificata
Monitor
1920x1080 27"
PSU
Non specificato
Case
Non specificato
Periferiche
Nono specificato
Net
Eolo
OS
Ubuntu
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.

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!