C/C++ 2 parallel laufende Prozess

#877890
Lesenswert?

Hallo Leute,

ich hoffe, dass jermend mir sagen kann wie ich 2 paralle laufende 
Prozesse in einem C Programm schreiben kann.

Ich will die Information von 2 unterschiedlichen Client gleichzeitig 
bekommen und arbeiten. Von daher habe ich gedacht dass ich diesem 
Problem mit 2 paralle laufende Prozesse in einem C Programm lösen kann.

Danke für euere Hilfe.

Grüße,
Buns
Gast #877899
Lesenswert?

also genau für den zweck gibt es doch thread - einfach mal bei 
createthread in der man/hilfe suchen.

Aber es geht auch ohne thread, hängt von der art der Anwendung ab. 
Thread erzeugen einen gewissen overhead.
#879093
Lesenswert?

Ich habe folgenden Code geschriben. Beim Kompile bekomme ich diese 
Meldung

"undefined reference to pthread_create"

1
#include ...
2
#include "encoding.h"
3
socklen_t len3;
4
struct sockaddr_in addr_i3;
5
socket_t rawsock;
6
int main(){
7
  /**
8
   *create a socket
9
   *
10
   *transport protokol: IP Protokol
11
   */
12
  rawsock = create_socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
13
  printf("create successful a Raw Socket - IP Protokol\n");
14
  
15
  /**
16
   *set a socket option 
17
   */
18
  setsockoption(rawsock, IPPROTO_IP, IP_HDRINCL);
19
   
20
  /*
21
   *connect 
22
   */
23
  addr_i3.sin_family = AF_INET;
24
  addr_i3.sin_addr.s_addr = inet_addr(IP_I3);
25
  len3 = sizeof(addr_i3);
26
  
27
  printf("waiting for data\n"); 
28
  
29
  /**
30
   *create und start thread
31
   */
32
  pthread_create(&thread_en, NULL, (void*)encoding, &rawsock);
33
  
34
  close_socket(rawsock);
35
  
36
  return 0;
37
}
38
/*************************************************/
hier ist file encoding.h
1
void encoding(socket_t *sock);
encoding.c
1
#include "encoding.h"
2

3
void encoding(socket_t *sock){
4
char buf[1024]
5
recvfrom(*sock, &buf, 1024, (struct sockaddr*)&addr_i3, &len3);
6

7
}
und meine makefile

CC  = /usr/bin/gcc
CFLAGS  = -Wall -g

OBJ = main.o socket.o encoding.o

main: $(OBJ)
  $(CC)  $(CFLAGS) -o main $(OBJ)

%.o: %.c
  $(CC)  $(CFLAGS) -c $<

Ich kann gerade nicht sehe wo der Fehler ist. Ich bin sehr dankbar für 
jeden Hinweis.

Gruß
Buns
Admin Persönliche Seite #879117
Lesenswert?

Buns Tsuko wrote:
> Ich will die Information von 2 unterschiedlichen Client gleichzeitig
> bekommen und arbeiten. Von daher habe ich gedacht dass ich diesem
> Problem mit 2 paralle laufende Prozesse in einem C Programm lösen kann.

Dazu brauchst du nicht unbedingt zwei Prozesse/Threads. Du kannst auch 
non-blocking sockets verwenden und diese mit select() oder poll() reihum 
abfragen. Das erspart es dir dich um Synchronisierung von Threads 
kümmern zu müssen.
#879121
Lesenswert?

Simon K. wrote:
> probiers mit
>
1
> #include <pthread.h>
2
>
>
> EDIT: Ach quatsch, das hast du ja sicher schon. du musst natürlich die
> LIB noch hinzulinken, in der die pthread Funktionen liegen.
>
> Siehe hier:
> http://www.c-plusplus.de/forum/viewtopic-var-t-is-39508.html
>
>
1
-lpthread
 zum linken dazugeben.

Danke für den Hinweis. Ich muss beim Makefile nocht linken :)

Gruß,
Buns
#879126
Lesenswert?

Andreas Schwarz wrote:
> Buns Tsuko wrote:
>> Ich will die Information von 2 unterschiedlichen Client gleichzeitig
>> bekommen und arbeiten. Von daher habe ich gedacht dass ich diesem
>> Problem mit 2 paralle laufende Prozesse in einem C Programm lösen kann.
>
> Dazu brauchst du nicht unbedingt zwei Prozesse/Threads. Du kannst auch
> non-blocking sockets verwenden und diese mit select() oder poll() reihum
> abfragen. Das erspart es dir dich um Synchronisierung von Threads
> kümmern zu müssen.

Ja. Aber ich kann das nicht benutzen wenn ich die Information von A nach 
B und gleichzeitig von B nach A übertrage muss. Oder?

Gruß,
Buns
Admin Persönliche Seite #879159
Lesenswert?

Doch, du kannst damit prinzipiell alles machen was du auch mit Threads 
machen kannst (vorausgesetzt du hast keine langen Berechnungen die 
preemtiv unterbrochen werden müssen). Du liest/schreibst nur die Daten 
im Buffer, das Betriebssystem kümmert sich um die eigentliche 
Übertragung und sagt Bescheid wenn Daten angekommen sind bzw. wieder 
Platz im Buffer ist.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren