Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Linux/Unix ::  eof bedingung bei unbenannter pipe  
Gehen Sie zu Seite Zurück  1, 2
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
C++ Forumbot
Forumbot

Benutzerprofil
Anmeldungsdatum: 29.02.2004
Beiträge: 16160
Beitrag C++ Forumbot Forumbot 12:28:03 19.01.2012   Titel:              Zitieren

Dieser Thread wurde von Moderator/in rüdiger aus dem Forum C (C89 und C99) in das Forum Linux/Unix verschoben.

Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?


Dieses Posting wurde automatisch erzeugt.

_________________
Besuchen Sie unsere Bücherecke.
http://www.c-plusplus.de/bucher.php
Mit jeder Bestellung unterstützen Sie das Forum.
oelpipeline
Unregistrierter




Beitrag oelpipeline Unregistrierter 18:45:20 20.01.2012   Titel:              Zitieren

Die Sache ist folgende:
Die EOF bedingung wird nur dann ausgelöst, wenn der andere Teil der Pipe bereits zu ist.
Also habe ich vor die while schleife mit dem read drin einfach close(p[1]); geschrieben und schon sorgt ein close auf der anderen seite dafür, dass die komplette pipe dicht ist und die eof bedingung wird ausgelöst.
folgendes funktioniert nun also:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int child1(){
  close(p[0]);
  while(fgets(eab, sizeof(eab), stdin)!=NULL)
  write(p[1], eab, sizeof(eab));
close(p[1]);

 
 
  return 0;
}

int parent(){
  close(p[1]);   //Ohne das Close hier gehts nicht!!!
  while(read(p[0], eab, sizeof(eab))!=0)
      printf("%s\n", eab);
  return 0;
  wait(NULL);
  wait(NULL);
}
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int child1(){
close(p[0]);
while(fgets(eab, sizeof(eab), stdin)!=NULL)
write(p[1], eab, sizeof(eab));
close(p[1]);



return 0;
}

int parent(){
close(p[1]); //Ohne das Close hier gehts nicht!!!
while(read(p[0], eab, sizeof(eab))!=0)
printf("%s\n", eab);
return 0;
wait(NULL);
wait(NULL);
}
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int child1(){
  close(p[0]);
  while(fgets(eab, sizeof(eab), stdin)!=NULL)
  write(p[1], eab, sizeof(eab));
close(p[1]);

 
 
  return 0;
}

int parent(){
  close(p[1]);   //Ohne das Close hier gehts nicht!!!
  while(read(p[0], eab, sizeof(eab))!=0)
      printf("%s\n", eab);
  return 0;
  wait(NULL);
  wait(NULL);
}



Der Punkt ist nun aber, dass ich im parent Prozess ab und zu auf der Pipe schreiben muss, jedoch die EOF Bedingung trotzdem auslösbar bleiben muss, bedeutet also für mich ich muss nach dem schreiben p[1] schließen und vor dem schreiben wieder öffnen.
doch wie bekomm ich eine pipe wieder geöffnet?
wenn ich das mit pipe() mache, so funktioniert das doch nur wenn ich danach ein fork() benutze, oder?

lg
oelpipeline
Unregistrierter




Beitrag oelpipeline Unregistrierter 15:03:51 21.01.2012   Titel:              Zitieren

Ich realisiere es jetzt mit 2 pipes pro child Prozess.
Folgendes Problem habe ich aber immernoch:
wenn ich nur einen Child Prozess verwende, klappt alles prima, nach strg-d wird beendet. habe ich 2 Child Prozesse klappt auf einmal garnichts mehr. woran liegt das?
hier der quelltext mit 1 Child(Funktionsfähig):
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
char eab[20];
char sig[10];
  int cp1[2];
  int cp2[2];
  int pc1[2];
  int pc2[2];

int main(void)
{
 
  pid_t pid1, pid2;
  pipe(pc1);
  pipe(pc2);
  pipe(cp1);
  pipe(cp2);
  pid1=fork();
  switch(pid1){
    case 0: child1();
    break;
    default:
      pid2=fork();
      switch(pid2){
    case 0: child2();
    break;
    default: parent();
    break;
      }
      break;
  }
    return 0;
}




int child1(){
  printf("1 gestartet\n");
  int stop=0;
   close(pc1[1]);
 close(cp1[0]);
  while(!stop){
    printf("1 warte auf startsignal\n");
    read(pc1[0], eab, sizeof(eab)); //warte auf startsignal
  printf("Child 1 Eingabe:\n");
 if(fgets(eab, sizeof(eab), stdin)==NULL)
   stop=1;
 else
write(cp1[1], eab, sizeof(eab));
 
   
  }
  close(cp1[1]);
  printf("1 beendet\n");
  return 0;
}

int child2(){

  return 0;
}
int parent(){
  close(pc1[0]);
  close(cp1[1]);
  close(pc2[0]);
  close(cp2[1]);
  int stop1=0, stop2=0, stop=0;
  while(!stop){
 
    if(!stop1){
      printf("Parent Zweig 1\n");
      write(pc1[1], "sig\0", 5); //schreibe startsignal
      printf("warte auf eingabe\n");
    if(read(cp1[0], eab, sizeof(eab))==0){
      stop1=1;
    printf("EOF erhalten\n");
   
    }
    else
      printf("Ausgabe vom Child 1:%s\n", eab);
  }
  if(!stop2){
 stop2=1;
    }
 
  if(stop1&&stop2)
    stop=1;
  }
  wait(NULL);
  wait(NULL);
return 0;
}
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
char eab[20];
char sig[10];
int cp1[2];
int cp2[2];
int pc1[2];
int pc2[2];

int main(void)
{

pid_t pid1, pid2;
pipe(pc1);
pipe(pc2);
pipe(cp1);
pipe(cp2);
pid1=fork();
switch(pid1){
case 0: child1();
break;
default:
pid2=fork();
switch(pid2){
case 0: child2();
break;
default: parent();
break;
}
break;
}
return 0;
}




int child1(){
printf("1 gestartet\n");
int stop=0;
close(pc1[1]);
close(cp1[0]);
while(!stop){
printf("1 warte auf startsignal\n");
read(pc1[0], eab, sizeof(eab)); //warte auf startsignal
printf("Child 1 Eingabe:\n");
if(fgets(eab, sizeof(eab), stdin)==NULL)
stop=1;
else
write(cp1[1], eab, sizeof(eab));


}
close(cp1[1]);
printf("1 beendet\n");
return 0;
}

int child2(){

return 0;
}
int parent(){
close(pc1[0]);
close(cp1[1]);
close(pc2[0]);
close(cp2[1]);
int stop1=0, stop2=0, stop=0;
while(!stop){

if(!stop1){
printf("Parent Zweig 1\n");
write(pc1[1], "sig\0", 5); //schreibe startsignal
printf("warte auf eingabe\n");
if(read(cp1[0], eab, sizeof(eab))==0){
stop1=1;
printf("EOF erhalten\n");

}
else
printf("Ausgabe vom Child 1:%s\n", eab);
}
if(!stop2){
stop2=1;
}

if(stop1&&stop2)
stop=1;
}
wait(NULL);
wait(NULL);
return 0;
}
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
char eab[20];
char sig[10];
  int cp1[2];
  int cp2[2];
  int pc1[2];
  int pc2[2];

int main(void)
{
 
  pid_t pid1, pid2;
  pipe(pc1);
  pipe(pc2);
  pipe(cp1);
  pipe(cp2);
  pid1=fork();
  switch(pid1){
    case 0: child1();
    break;
    default:
      pid2=fork();
      switch(pid2){
    case 0: child2();
    break;
    default: parent();
    break;
      }
      break;
  }
    return 0;
}




int child1(){
  printf("1 gestartet\n");
  int stop=0;
   close(pc1[1]);
 close(cp1[0]);
  while(!stop){
    printf("1 warte auf startsignal\n");
    read(pc1[0], eab, sizeof(eab)); //warte auf startsignal
  printf("Child 1 Eingabe:\n");
 if(fgets(eab, sizeof(eab), stdin)==NULL)
   stop=1;
 else
write(cp1[1], eab, sizeof(eab));
 
   
  }
  close(cp1[1]);
  printf("1 beendet\n");
  return 0;
}

int child2(){

  return 0;
}
int parent(){
  close(pc1[0]);
  close(cp1[1]);
  close(pc2[0]);
  close(cp2[1]);
  int stop1=0, stop2=0, stop=0;
  while(!stop){
 
    if(!stop1){
      printf("Parent Zweig 1\n");
      write(pc1[1], "sig\0", 5); //schreibe startsignal
      printf("warte auf eingabe\n");
    if(read(cp1[0], eab, sizeof(eab))==0){
      stop1=1;
    printf("EOF erhalten\n");
   
    }
    else
      printf("Ausgabe vom Child 1:%s\n", eab);
  }
  if(!stop2){
 stop2=1;
    }
 
  if(stop1&&stop2)
    stop=1;
  }
  wait(NULL);
  wait(NULL);
return 0;
}



hier mit 2 childs:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
char eab[20];
char sig[10];
  int cp1[2];
  int cp2[2];
  int pc1[2];
  int pc2[2];

int main(void)
{
 
  pid_t pid1, pid2;
  pipe(pc1);
  pipe(pc2);
  pipe(cp1);
  pipe(cp2);
  pid1=fork();
  switch(pid1){
    case 0: child1();
    break;
    default:
      pid2=fork();
      switch(pid2){
    case 0: child2();
    break;
    default: parent();
    break;
      }
      break;
  }
    return 0;
}




int child1(){
  printf("1 gestartet\n");
  int stop=0;
   close(pc1[1]);
 close(cp1[0]);
  while(!stop){
    printf("1 warte auf startsignal\n");
    read(pc1[0], eab, sizeof(eab)); //warte auf startsignal
  printf("Child 1 Eingabe:\n");
 if(fgets(eab, sizeof(eab), stdin)==NULL)
   stop=1;
 else
write(cp1[1], eab, sizeof(eab));
 
   
  }
  close(cp1[1]);
  printf("1 beendet\n");
  return 0;
}

int child2(){
printf("2 gestartet\n");
  int stop=0;
   close(pc2[1]);
 close(cp2[0]);
  while(!stop){
    printf("2 warte auf startsignal\n");
    read(pc2[0], eab, sizeof(eab)); //warte auf startsignal
  printf("Child 2 Eingabe:\n");
 if(fgets(eab, sizeof(eab), stdin)==NULL)
   stop=1;
 else
write(cp2[1], eab, sizeof(eab));
 
   
  }
  close(cp2[1]);
  printf("2 beendet\n");
  return 0;
}
int parent(){
  close(pc1[0]);
  close(cp1[1]);
  close(pc2[0]);
  close(cp2[1]);
  int stop1=0, stop2=0, stop=0;
  while(!stop){
 
    if(!stop1){
      printf("Parent Zweig 1\n");
      write(pc1[1], "sig\0", 5); //schreibe startsignal
      printf("warte auf eingabe\n");
    if(read(cp1[0], eab, sizeof(eab))==0){
      stop1=1;
    printf("EOF erhalten\n");
   
    }
    else
      printf("Ausgabe vom Child 1:%s\n", eab);
  }
  if(!stop2){
  printf("Parent Zweig 2\n");
      write(pc2[1], "sig\0", 5); //schreibe startsignal
      printf("warte auf eingabe\n");
    if(read(cp2[0], eab, sizeof(eab))==0){
      stop2=1;
    printf("EOF erhalten\n");
   
    }
    else
      printf("Ausgabe vom Child 2:%s\n", eab);
    }
 
  if(stop1&&stop2)
    stop=1;
  }
  wait(NULL);
  wait(NULL);
return 0;
}
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
char eab[20];
char sig[10];
int cp1[2];
int cp2[2];
int pc1[2];
int pc2[2];

int main(void)
{

pid_t pid1, pid2;
pipe(pc1);
pipe(pc2);
pipe(cp1);
pipe(cp2);
pid1=fork();
switch(pid1){
case 0: child1();
break;
default:
pid2=fork();
switch(pid2){
case 0: child2();
break;
default: parent();
break;
}
break;
}
return 0;
}




int child1(){
printf("1 gestartet\n");
int stop=0;
close(pc1[1]);
close(cp1[0]);
while(!stop){
printf("1 warte auf startsignal\n");
read(pc1[0], eab, sizeof(eab)); //warte auf startsignal
printf("Child 1 Eingabe:\n");
if(fgets(eab, sizeof(eab), stdin)==NULL)
stop=1;
else
write(cp1[1], eab, sizeof(eab));


}
close(cp1[1]);
printf("1 beendet\n");
return 0;
}

int child2(){
printf("2 gestartet\n");
int stop=0;
close(pc2[1]);
close(cp2[0]);
while(!stop){
printf("2 warte auf startsignal\n");
read(pc2[0], eab, sizeof(eab)); //warte auf startsignal
printf("Child 2 Eingabe:\n");
if(fgets(eab, sizeof(eab), stdin)==NULL)
stop=1;
else
write(cp2[1], eab, sizeof(eab));


}
close(cp2[1]);
printf("2 beendet\n");
return 0;
}
int parent(){
close(pc1[0]);
close(cp1[1]);
close(pc2[0]);
close(cp2[1]);
int stop1=0, stop2=0, stop=0;
while(!stop){

if(!stop1){
printf("Parent Zweig 1\n");
write(pc1[1], "sig\0", 5); //schreibe startsignal
printf("warte auf eingabe\n");
if(read(cp1[0], eab, sizeof(eab))==0){
stop1=1;
printf("EOF erhalten\n");

}
else
printf("Ausgabe vom Child 1:%s\n", eab);
}
if(!stop2){
printf("Parent Zweig 2\n");
write(pc2[1], "sig\0", 5); //schreibe startsignal
printf("warte auf eingabe\n");
if(read(cp2[0], eab, sizeof(eab))==0){
stop2=1;
printf("EOF erhalten\n");

}
else
printf("Ausgabe vom Child 2:%s\n", eab);
}

if(stop1&&stop2)
stop=1;
}
wait(NULL);
wait(NULL);
return 0;
}
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
char eab[20];
char sig[10];
  int cp1[2];
  int cp2[2];
  int pc1[2];
  int pc2[2];

int main(void)
{
 
  pid_t pid1, pid2;
  pipe(pc1);
  pipe(pc2);
  pipe(cp1);
  pipe(cp2);
  pid1=fork();
  switch(pid1){
    case 0: child1();
    break;
    default:
      pid2=fork();
      switch(pid2){
    case 0: child2();
    break;
    default: parent();
    break;
      }
      break;
  }
    return 0;
}




int child1(){
  printf("1 gestartet\n");
  int stop=0;
   close(pc1[1]);
 close(cp1[0]);
  while(!stop){
    printf("1 warte auf startsignal\n");
    read(pc1[0], eab, sizeof(eab)); //warte auf startsignal
  printf("Child 1 Eingabe:\n");
 if(fgets(eab, sizeof(eab), stdin)==NULL)
   stop=1;
 else
write(cp1[1], eab, sizeof(eab));
 
   
  }
  close(cp1[1]);
  printf("1 beendet\n");
  return 0;
}

int child2(){
printf("2 gestartet\n");
  int stop=0;
   close(pc2[1]);
 close(cp2[0]);
  while(!stop){
    printf("2 warte auf startsignal\n");
    read(pc2[0], eab, sizeof(eab)); //warte auf startsignal
  printf("Child 2 Eingabe:\n");
 if(fgets(eab, sizeof(eab), stdin)==NULL)
   stop=1;
 else
write(cp2[1], eab, sizeof(eab));
 
   
  }
  close(cp2[1]);
  printf("2 beendet\n");
  return 0;
}
int parent(){
  close(pc1[0]);
  close(cp1[1]);
  close(pc2[0]);
  close(cp2[1]);
  int stop1=0, stop2=0, stop=0;
  while(!stop){
 
    if(!stop1){
      printf("Parent Zweig 1\n");
      write(pc1[1], "sig\0", 5); //schreibe startsignal
      printf("warte auf eingabe\n");
    if(read(cp1[0], eab, sizeof(eab))==0){
      stop1=1;
    printf("EOF erhalten\n");
   
    }
    else
      printf("Ausgabe vom Child 1:%s\n", eab);
  }
  if(!stop2){
  printf("Parent Zweig 2\n");
      write(pc2[1], "sig\0", 5); //schreibe startsignal
      printf("warte auf eingabe\n");
    if(read(cp2[0], eab, sizeof(eab))==0){
      stop2=1;
    printf("EOF erhalten\n");
   
    }
    else
      printf("Ausgabe vom Child 2:%s\n", eab);
    }
 
  if(stop1&&stop2)
    stop=1;
  }
  wait(NULL);
  wait(NULL);
return 0;
}



nicht wundern über die vielen printfs, die nehme ich um rauszufinden, wo ich mich grad im Programm befinde.


wäre schön wenn mir jmd sagen könnte wieso das mit einem child klappt, aber nicht mit 2..
oelpipeline
Unregistrierter




Beitrag oelpipeline Unregistrierter 15:14:31 21.01.2012   Titel:              Zitieren

um das problem nochmal kurz zu schildern,
im 1. quelltext wird beim drücken von strg-d im fgets der child-prozess beendet und im parentprozess beim read() die eof-bedingung(0) ausgelöst.
sobald ich aber noch einen 2. child prozess drinnen habe, wird die eof bedingung nicht mehr ausgelöst, obwohl ich nix anderes mache als noch einen Prozess dazu-.-
oelpipeline
Unregistrierter




Beitrag oelpipeline Unregistrierter 15:22:54 21.01.2012   Titel:              Zitieren

Des rätsels Lösung:
Die man muss ALLE nicht benötigten Pipes schließen.
also auch die pipes, die eigentlich für nen anderen Prozess gedacht sind.
Nur wieso?!
oelpipeline
Unregistrierter




Beitrag oelpipeline Unregistrierter 15:25:29 21.01.2012   Titel:              Zitieren

AArgh, ich sollte mich mal anmelden.
Also ich habs jetzt alles rausgefunden:
dadurch, dass man 2 Prozesse erzeugt und beide Prozesse die Pipes der anderen mitvererbt bekommen, sind diese weiterhin geöffnet.
Im Parentprozess wird aufs schließen der pipe nicht reagiert, weil der andere Prozess diese ja noch offen hat.
Jaa, wenn der Prof sagt man soll alle schließen, dann sollte man das tun xD
C/C++ Forum :: Linux/Unix ::  eof bedingung bei unbenannter pipe  
Gehen Sie zu Seite Zurück  1, 2
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.