2016-09-23 3 views
0
#include <sys/types.h> 
#include <stdio.h> 
#include <unistd.h> 
#include <sys/wait.h> 

int main() 
{ 
    /* Create the pipe */ 
    pid_t pid; 
    int k; 
    pid = fork(); 

    if (pid < 0) 
    { 
     printf ("Fork Failed\n"); 
     return -1; 
    } 

    for(k=0;k<60;k++) 
    { 
     if (pid == 0) 
     { 

      printf("I'm the child\n"); 
      printf("my pid is %d\n",getpid()); 
      FILE *fp,*fp1; 
      int i; 


      /* open the file */ 

      fp = fopen("File1.txt ", "r"); 

      fscanf(fp, "%d", &i) ; 
      printf("i: %d and pid: %d",i,pid); 
      fclose(fp); 
      fp1= fopen("File1.txt ", "w"); 

      fprintf(fp, "%d", i++); 

      fclose(fp1); 
      sleep(1); 
     } 
     else 
     { 
      printf("I'm the parent\n"); 
      printf("my pid is %d\n",getpid()); 
      FILE *fp,*fp1; 
      int i; 
      int y; 

      /* open the file */ 

      fp = fopen("File1.txt ", "r"); 

      fscanf(fp, "%d", &i) ; 
      printf("i: %d and pid: %d",i,pid); 
      fclose(fp); 
      fp1= fopen("File1.txt ", "w"); 

      fprintf(fp, "%d", i++); 

      fclose(fp1); 
      sleep(1); 
     } 


    } 
    return 0; 
} 

Ich habe einen Fehler, d. H. Segmentation Fehler Core nach der Ausführung dieses Codes gedumpt. Ich würde gerne wissen, wo ich falsch gemacht habe. Mein Hauptmotto ist: Ich möchte eine Datei lesen, die eine Nummer 1 enthält und diese Nummer ausdrucken. Ich möchte die gleiche Datei schreiben und diese Zahl um 1 erhöhen. Nach dem Kind oder Elternteil geht in den Schlafmodus und dann Eltern oder Kind führt die gleiche Prozedur erneut. Dieser Prozess wird bis zu 60 Mal fortgesetzt.Fehler beim Ausführen des folgenden Programms in

+2

Macht es Ihnen etwas aus, Ihren Code so zu formatieren, dass er lesbar ist? Einrückung und 'für (x; y; z)' ist schrecklich, stattdessen ist 'für (x; y; z;)' lesbarer. Außerdem gibt 'fopen()' 'NULL zurück, wenn zB die Datei nicht existiert. Sie müssen nach 'fopen()' überprüfen. –

+3

Ein Punkt, die Anweisung 'fprintf (fp,"% d ", i ++); sollte geändert werden in' fprintf (fp1, "% d", i ++); '? Verwenden Sie einen Debugger, um das Problem in Ihrem Code zu diagnostizieren. – putu

+0

Der Code scheint für Eltern und Kind identisch zu sein, mit Ausnahme des ersten 'printf'. Also muss nur der erste 'printf' in den' if/else' Blöcken stehen. – user3386109

Antwort

1

Sie schreiben in den falschen Dateideskriptor in Eltern und Kind.

Die folgende Zeile:

fprintf(fp, "%d", i++); 

sein sollte:

fprintf(fp1, "%d", i++); 

der Tat haben Sie bereits fp vor geschlossen.

Verwandte Themen