Domanda APRIRE A VIDEO UN FILE

KHAN21

Utente Bronze
9 Gennaio 2021
36
16
3
29
Buongiorno, stavo facendo un esercizio sulla copia del contenuto di un file in un altro, e mi stavo chiedendo se era possibile poi far aprire il file all'editor di testo. Grazie mille per le eventuali risposte.
 
Non c'è un modo standard. Dipende dal sistema operativo, dalle tipologie di applicazioni installate, dalla configurazione del sistema.

L'approccio migliore, che funziona sempre, è quello di non tentare di avviare l'editor di testo esterno ma implementare l'editor dentro l'applicazione stessa.

Se non è possibile, devi prima identificare il sistema operativo:
- Se Linux: leggi il valore della variabile di ambiente EDITOR (getenv()) e quindi chiami una primitiva per eseguire processi (execl, execlp, execle, execv, execve, etc...) passando come nome del processo il valore della variabile EDITOR e come parametro il percorso al file da aprire. Se la variabile EDITOR non è settata, puoi tentare in ordine di cercare editor di testo comuni in ambiente Linux nel file system (vim, nano, ed, gedit, kate, ....
- Se Windows: la presenza del notepad in C:\Windows\system32\notepad.exe dovrebbe essere quasi garantita. Puoi quindi chiamare CreateProcess passandogli il percorso al notepad come programma da eseguire e il nome del file da aprire come parametro. Sarebbe comunque meglio avere una opzione di configurazione da quale parte nel programma che permetta all'utente di scegliere un altro editor di testo.
- Se MacOS: altro...
- Se BSD: altro...
- e così via...
Per identificare il sistema operativo, do solito si controlla la presenza di macro definite dal compilatore (linux, _WIN32, ecc...) tramite direttive del preprocessore.
 
Non c'è un modo standard. Dipende dal sistema operativo, dalle tipologie di applicazioni installate, dalla configurazione del sistema.

L'approccio migliore, che funziona sempre, è quello di non tentare di avviare l'editor di testo esterno ma implementare l'editor dentro l'applicazione stessa.

Se non è possibile, devi prima identificare il sistema operativo:
- Se Linux: leggi il valore della variabile di ambiente EDITOR (getenv()) e quindi chiami una primitiva per eseguire processi (execl, execlp, execle, execv, execve, etc...) passando come nome del processo il valore della variabile EDITOR e come parametro il percorso al file da aprire. Se la variabile EDITOR non è settata, puoi tentare in ordine di cercare editor di testo comuni in ambiente Linux nel file system (vim, nano, ed, gedit, kate, ....
- Se Windows: la presenza del notepad in C:\Windows\system32\notepad.exe dovrebbe essere quasi garantita. Puoi quindi chiamare CreateProcess passandogli il percorso al notepad come programma da eseguire e il nome del file da aprire come parametro. Sarebbe comunque meglio avere una opzione di configurazione da quale parte nel programma che permetta all'utente di scegliere un altro editor di testo.
- Se MacOS: altro...
- Se BSD: altro...
- e così via...
Per identificare il sistema operativo, do solito si controlla la presenza di macro definite dal compilatore (linux, _WIN32, ecc...) tramite direttive del preprocessore.
se invece, volessi eseguire lo script sia su windows che su linux? in più cos'è una primitiva? scusate per le domande forse molto banali.
 
se invece, volessi eseguire lo script sia su windows che su linux?
Eh, come detto sopra devi compilare il codice in 2 versioni, una per Windows e una per Linux. Puoi far uso della compilazione condizionale: https://en.wikipedia.org/wiki/C_preprocessor#Conditional_compilation

in più cos'è una primitiva?
Sono le funzioni messe a disposizione dal sistema operativo ai programmi per eseguire compiti che richiedono di essere eseguiti in kernel mode (con i privilegi del sistema operativo). La creazione di un processo è una operazione che richiede l'uso di una primitiva del sistema operativo. Per Windows, questa è CreateProcess(); Per Linux, è execve().