1/* This is a test case where the parent process forks 10 2 * children which contend to write to the same file. With 3 * file locking support, the data from each child should not 4 * be lost. 5 */ 6#include <stdio.h> 7#include <stdlib.h> 8#include <unistd.h> 9#include <sys/wait.h> 10 11extern FILE *lprofOpenFileEx(const char *); 12int main(int argc, char *argv[]) { 13 pid_t tid; 14 FILE *F; 15 const char *FN; 16 int child[10]; 17 int c; 18 int i; 19 20 if (argc < 2) { 21 fprintf(stderr, "Requires one argument \n"); 22 exit(1); 23 } 24 FN = argv[1]; 25 truncate(FN, 0); 26 27 for (i = 0; i < 10; i++) { 28 c = fork(); 29 // in child: 30 if (c == 0) { 31 FILE *F = lprofOpenFileEx(FN); 32 if (!F) { 33 fprintf(stderr, "Can not open file %s from child\n", FN); 34 exit(1); 35 } 36 fseek(F, 0, SEEK_END); 37 fprintf(F, "Dump from Child %d\n", i); 38 fclose(F); 39 exit(0); 40 } else { 41 child[i] = c; 42 } 43 } 44 45 // In parent 46 for (i = 0; i < 10; i++) { 47 int child_status; 48 if ((tid = waitpid(child[i], &child_status, 0)) == -1) 49 break; 50 } 51 F = lprofOpenFileEx(FN); 52 if (!F) { 53 fprintf(stderr, "Can not open file %s from parent\n", FN); 54 exit(1); 55 } 56 fseek(F, 0, SEEK_END); 57 fprintf(F, "Dump from parent %d\n", i); 58 return 0; 59} 60