Come si chiama un programma da un altro?

3

Quello che mi chiedo è come i programmi in esecuzione comunichino tra loro e se qualcuno possa pubblicare qualche codice di esempio su come farlo, così posso provarlo io stesso, solo per scopi didattici.

Ad esempio, ho già lavorato con i database e nel mio codice devo sempre "stabilire una connessione al database". Il servizio database deve essere in esecuzione prima di avviare il mio programma, altrimenti fallirà. Che cosa sta succedendo esattamente con quella connessione e come funziona?

    
posta Nickolai 22.03.2014 - 03:24
fonte

4 risposte

6

Qualsiasi tipo di comunicazione con il mondo esterno è in definitiva mediata dal sistema operativo. Sono disponibili vari meccanismi per Comunicazione tra processi , ma i socket di rete e le pipe sono probabilmente tra i più comuni. Se hai mai collegato l'output di un programma a un altro su una shell della riga di comando, quei processi stavano comunicando con una pipe. La connessione al database che hai citato utilizza un socket di rete, forse con un protocollo personalizzato. Per comunicare in modo abbastanza universale macchine separate, probabilmente andrai con un servizio web , che generalmente significa passare informazioni attraverso HTTP e probabilmente XML.

    
risposta data 22.03.2014 - 03:37
fonte
1

Ci sono possibilità di comunicazione di alto livello:

  1. Chiamate di procedure remote (inclusi servizi Web, CORBA, ecc.)
  2. Trasferimento file
  3. Database condiviso
  4. Messaggi (AMQP, ZeroMQ ecc.)

Ci sono anche possibilità di comunicazione di basso livello:

  1. Sockets
  2. Tubi
  3. -Memoria condivisa
  4. Signal
risposta data 22.03.2014 - 10:15
fonte
0

Questa non è una domanda facile a cui rispondere perché coinvolge diversi tipi di lavoro.

Per il caso di un database, ad esempio, di solito è una connessione a un server tramite il protocollo TCP / IP e il database deve essere in esecuzione perché il server deve essere connesso in modo che riceva la richiesta dal codice ( pensa di non poter accedere a un sito web offline).

Tuttavia, nel caso di altri programmi, dipende molto. Se è solo un modulo scritto nella stessa lingua, puoi semplicemente importarlo. Se si tratta di un processo Unix, è possibile chiamare la funzione di sistema che passa il comando. Se vuoi che qualcosa sia multipiattaforma, puoi utilizzare un servizio web Restful o SOAP (che richiederebbe una connessione Internet) e così via.

    
risposta data 22.03.2014 - 03:41
fonte
0

Per garantire che il servizio di database sia in esecuzione, puoi controllare se il servizio è in esecuzione e avviarlo o interromperlo di conseguenza.

per Windows dovresti usare l'API di Windows per farlo di conseguenza.

ecco il codice di esempio

link

e anche un approccio diverso qui

link

    
risposta data 22.03.2014 - 08:23
fonte

Leggi altre domande sui tag