Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-01-2006, 23:28   #1
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
[Unix] Scartare in /dev/null l'output di un programma

Ciao, sto lavorando un po' con le funzioni UNIX per la esecuzione di programmi da un programma (come execve() e le altre relative).

Mi trovo però davanti a un problema, gradirei infatti che tutto l'output del programma che lancio dal mio venga o rediretto a /dev/null o in un buffer ad esempio, solo che non so come fare e cercando su internet non ho cavato un ragno dal buco.

Il codice che avvia il programma è questo:

Quote:
extern char **environ;
int pID = fork();
if (pID == 0)
{
execvp(executable, Arguments);
exit(1);
}
Chiaramente "executable" e "Arguments" sono rispettivamente un array di caratteri e un array di array di caratteri opportunamente inizializzati.

Il programma che viene chiamato mi butta fuori un sacco di output in console , mentre io vorrei che il mio utente non venisse turbato dall' output in console mentre giochicchia con la GUI.

Come si fa a fare ciò che ho chiesto ?

Grazie dell' aiuto

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2006, 23:42   #2
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
dovrebbe funzionare.
Codice:
        int devnull_fd = fopen("/dev/null", O_WRONLY);
        if (devnull_fd < 1) {
            perror("non sono riuscito ad aprire /dev/null");
            exit (-EKABOOM);
        }

        dup2 (devnull_fd, fileno(stdout));
devi metterlo prima della exec

ciao
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2006, 23:59   #3
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
che cacchio ci fai in giro a quest'ora??

Grazie, domani provo

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2006, 00:07   #4
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Codice:
	extern char **environ;
	int pID = fork();
	if (pID == 0)
	{
		int devnull_fd = (int) fopen("/dev/null", "wb");
		if (devnull_fd < 1) {
			perror("non sono riuscito ad aprire /dev/null");
			exit (-1);
		}

		dup2 (devnull_fd, (int) fileno(stdout));
		execvp(executable, Arguments);
		exit(1);
		}
Non funziona

Tra l'altro ho dovuto castare a "int" l'output di fopen() e fileno() perchè il controllo dei tipi in C++ non permette la conversione da "FILE*" a "int", comunque in runtime l'output di "mencoder" me lo trovo ancora tutto sulla console

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2006, 00:17   #5
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Prova a redirigere anche stderr.

EDIT: non va perchè sono deficente. I parametri sono invertiti

ciao
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2006, 00:22   #6
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827


Non funza manco con stderr .

Non riesco a capire.

Sto sbagliando qualcosa io??

Codice:
	extern char **environ;
	int pID = fork();
	if (pID == 0)
	{
		int devnull_fd = (int) fopen("/dev/null", "wb");
		if (devnull_fd < 1) {
			perror("non sono riuscito ad aprire /dev/null");
			exit (-1);
		}

		dup2 (devnull_fd, (int) fileno(stdout) );
		dup2 (devnull_fd, (int) fileno(stderr) );
		execvp(executable, Arguments);
		exit(1);
		}
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2006, 00:27   #7
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da VICIUS
Prova a redirigere anche stderr.

EDIT: non va perchè sono deficente. I parametri sono invertiti

ciao
Leggi bene l'edit

ciao
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2006, 00:31   #8
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Non va manco invertendo cacchio!!

E poi sei sicuro che dovrebbero essere invertiti? A me leggendo il man di dup2 mi sembra + giusto com'erano prima
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2006, 12:14   #9
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Ci riprovo. Questo funziona. Vedi se ne ricavi qualcosa. Io purtroppo non scrivo piu roba in C da molto tempo e non ricordo se ci sono delle regoline per le varie execXX.

Codice:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main (int argc, char *argv[])
{
    const char *mencoder = "/usr/bin/mencoder";
    const char *mencoder_argv[] = {
        "mencoder", "dvd://",
        "-ovc", "lavc",
        "-oac", "mp3lame",
        "-lavcopts", "vcodec=mpeg4:vbitrate=700",
        "-lameopts", "abr:br=128",
        "-o", "prova.avi",
        NULL
    };

    int pid = fork();

    if (pid == 0) {
        int stdout_fd = open("/tmp/stdout.txt", O_WRONLY | O_CREAT);
        int stderr_fd = open("/tmp/stderr.txt", O_WRONLY | O_CREAT);

        dup2(stdout_fd, fileno(stdout));
        dup2(stderr_fd, fileno(stderr));

        execv(mencoder, mencoder_argv);
    } else {
        exit(0);
    }
}
ciao
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2006, 19:11   #10
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
A quanto ho capito "dup" funziona solo se il filedescriptor è aperto da "open()" e non da "fopen()" ...

Almeno per quanto ci ho capito.
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2006, 21:28   #11
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da AnonimoVeneziano
A quanto ho capito "dup" funziona solo se il filedescriptor è aperto da "open()" e non da "fopen()" ...

Almeno per quanto ci ho capito.
Ciao, prova questo:
Codice:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main (void)
{
    int fdnull;

    fdnull = open ("/dev/null", O_WRONLY);

    if (fdnull == -1)
    {
        printf ("Errore open\n");
        return 1;
    }

    dup2 (fdnull, STDOUT_FILENO);   /* Stdout --> /dev/null */
    dup2 (fdnull, STDERR_FILENO);   /* Stderr --> /dev/null */
    close (fdnull);

    fprintf (stdout, "Sto scrivendo su stdout!\n");
    fprintf (stderr, "Sto scrivendo su stderr!\n");

    return 0;
}
Vedrai che non stampa più nulla!
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Space Pioneer starebbe realizzando un pr...
SpaceX ritirerà ''a breve'' il Fa...
La Luna ha un nuovo cratere di grandi di...
ROG Cronox: ASUS alza l'asticella dei ca...
Lenovo annuncia nuovi sistemi per la vir...
M6 e M5 Ultra, i primi benchmark conferm...
La nuova falla della cybersecurity &egra...
The Blood of Dawnwalker, il sequel potre...
Colpiti i data center Amazon: irrecupera...
Google Wallet, nuova interfaccia in arri...
iPhone Duo, problemi di produzione per i...
Firefox diventa più veloce con PDF e JPE...
WhatsApp, arriva su iOS la nuova scorcia...
Snap presenta Specs: realtà aumentata, c...
SteamOS verso un cambiamento epocale: ar...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 01:14.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v