Ich versuche, meinen Code von C# zu C umzuschreiben und habe ein bisschen Ärger.Verwenden von Pipes, um Zeichenfolgen zwischen Prozessen zu senden
Also habe ich eine Datei namens test, in der es eine einzelne Textzeile gibt. Ich möchte diese Zeile lesen, sie durch die Pipe zwischen den Prozessen senden und sie auf dem Bildschirm ausdrucken.
Hier ist der Code:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
void
read_from_pipe (int file)
{
FILE *stream;
int c;
stream = fdopen (file, "r");
while ((c = fgetc (stream)) != EOF)
putchar (c);
fclose (stream);
}
void
write_to_pipe (int file)
{
FILE *stream;
FILE *testfile;
stream = fdopen (file, "w");
testfile = fopen("test.txt", "r");
char *line = NULL;
size_t len = 0;
//ssize_t read;
getline(&line, &len, testfile);
fprintf (stream, "%s", line);
free(line);
fclose(testfile);
fclose (stream);
}
int
main (void)
{
pid_t pid;
int mypipe[2];
if (pipe (mypipe))
{
fprintf (stderr, "Pipe failed.\n");
return EXIT_FAILURE;
}
pid = fork();
if (pid == (pid_t) 0)
{
close (mypipe[1]);
read_from_pipe (mypipe[0]);
return EXIT_SUCCESS;
}
else if (pid < (pid_t) 0)
{
fprintf (stderr, "Fork failed.\n");
return EXIT_FAILURE;
}
else
{
close (mypipe[0]);
write_to_pipe (mypipe[1]);
return EXIT_SUCCESS;
}
}
Allerdings scheine ich immer Segmentierung Fehler werden während dieser Code ausgeführt wird. Gibt es etwas, das mir fehlt?
Welche Zeile erhält den Segmentierungsfehler? – Barmar
Sie sollten nach einem Fehler von 'getline()' suchen. Wenn ein Fehler auftritt, kann "line" nicht zugewiesen werden, sodass beim Versuch, sie zu drucken, ein Segmentierungsfehler auftritt. – Barmar
Ich lief das Programm Zeile für Zeile und in der Tat bricht es auf getline. Ich spreche C nicht fließend, wie vermeide ich das? – Januszoff