pfefferkeks
31-05-2005, 09:03
Hi,
in dem unten angegbenen code soll einfach nur eine pipe erzeugt werden und ein zeichen in diese pipe geschrieben werden. nur leider bekomme ich bei dem aufruf:
vater 1 T
bekomme ich leider immer:
Send schlug fehl: : Socket operation on non-socket
Wer kann mir helfen?
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#define PIPE_BUF2 1
int main(int argc, char **argv) {
int fd[2];
int result=0;
int ressend=0;
int resrecv=0;
int anzahl=0;
pid_t soehne[atoi(argv[1])];
pid_t pidVater=getpid();
int i=0;
char puffer[PIPE_BUF2];
if (2 < argc) {
anzahl = atoi(argv[1]);
if ((argc-2) == anzahl) {
/**
* Pipe anlegen
*/
result = pipe(fd);
if ((-1) == result) {
perror("Bei erzeugen der Pipe ist ein Fehler aufgetretten: ");
exit(-1);
}
/**
* Soehne anlegen
*/
for (i=0; i<anzahl; i++) {
if (getpid() == pidVater) {
soehne[i] = fork();
if ((-1) == soehne[i]) {
perror("Fehler bei fork(): ");
exit(-1);
}
}
}
/**
* Wenn ich der Vater bin Lese- /Schreibseite der Pipe schliessen
*/
if (getpid() == pidVater) {
/* Lese Seite der Pipe schliessen */
close(fd[1]);
/* 1 Zeichen in die PIPE schreiben */
i=2; /*nur fuer die test phase. programm funktionirt dann nur mit "<programmaufruf> 1 T" */
ressend = send(fd[0], argv[i], 1, 0);
if ((-1) == ressend) {
perror("Send schlug fehl: ");
exit(-1);
}
}
}
else {
printf ("Die Anzahl der Zeichen ist Falsch!\n");
}
}
else {
printf ("Falsche Komandozeilenparameter!\nRichtig: Anzahl der Soehne angeben und dann folgend die auszugebenden Zeichen!\n");
}
return 0;
danke pfefferkeks
in dem unten angegbenen code soll einfach nur eine pipe erzeugt werden und ein zeichen in diese pipe geschrieben werden. nur leider bekomme ich bei dem aufruf:
vater 1 T
bekomme ich leider immer:
Send schlug fehl: : Socket operation on non-socket
Wer kann mir helfen?
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#define PIPE_BUF2 1
int main(int argc, char **argv) {
int fd[2];
int result=0;
int ressend=0;
int resrecv=0;
int anzahl=0;
pid_t soehne[atoi(argv[1])];
pid_t pidVater=getpid();
int i=0;
char puffer[PIPE_BUF2];
if (2 < argc) {
anzahl = atoi(argv[1]);
if ((argc-2) == anzahl) {
/**
* Pipe anlegen
*/
result = pipe(fd);
if ((-1) == result) {
perror("Bei erzeugen der Pipe ist ein Fehler aufgetretten: ");
exit(-1);
}
/**
* Soehne anlegen
*/
for (i=0; i<anzahl; i++) {
if (getpid() == pidVater) {
soehne[i] = fork();
if ((-1) == soehne[i]) {
perror("Fehler bei fork(): ");
exit(-1);
}
}
}
/**
* Wenn ich der Vater bin Lese- /Schreibseite der Pipe schliessen
*/
if (getpid() == pidVater) {
/* Lese Seite der Pipe schliessen */
close(fd[1]);
/* 1 Zeichen in die PIPE schreiben */
i=2; /*nur fuer die test phase. programm funktionirt dann nur mit "<programmaufruf> 1 T" */
ressend = send(fd[0], argv[i], 1, 0);
if ((-1) == ressend) {
perror("Send schlug fehl: ");
exit(-1);
}
}
}
else {
printf ("Die Anzahl der Zeichen ist Falsch!\n");
}
}
else {
printf ("Falsche Komandozeilenparameter!\nRichtig: Anzahl der Soehne angeben und dann folgend die auszugebenden Zeichen!\n");
}
return 0;
danke pfefferkeks