/* This is a test case where the parent process forks 10 * children which contend to write to the same file. With * file locking support, the data from each child should not * be lost. */ #include #include #include #include extern FILE *lprofOpenFileEx(const char *); int main(int argc, char *argv[]) { pid_t tid; FILE *F; const char *FN; int child[10]; int c; int i; if (argc < 2) { fprintf(stderr, "Requires one argument \n"); exit(1); } FN = argv[1]; truncate(FN, 0); for (i = 0; i < 10; i++) { c = fork(); // in child: if (c == 0) { FILE *F = lprofOpenFileEx(FN); if (!F) { fprintf(stderr, "Can not open file %s from child\n", FN); exit(1); } fseek(F, 0, SEEK_END); fprintf(F, "Dump from Child %d\n", i); fclose(F); exit(0); } else { child[i] = c; } } // In parent for (i = 0; i < 10; i++) { int child_status; if ((tid = waitpid(child[i], &child_status, 0)) == -1) break; } F = lprofOpenFileEx(FN); if (!F) { fprintf(stderr, "Can not open file %s from parent\n", FN); exit(1); } fseek(F, 0, SEEK_END); fprintf(F, "Dump from parent %d\n", i); return 0; }