Esempio n. 1
0
FILE *master_fopen(const char *name, const char *mode) {
  FILE *f = am_master() ? fopen(name, mode) : 0;

  /* other processes need to know if fopen returned zero, in order
     to abort if fopen failed.  If fopen was successfully, just return
     a random non-zero pointer (which is never used except to compare to zero)
     on non-master processes */
  if (broadcast(0, bool(f != 0)) && !am_master())
    f = (FILE *) name;
  return f;
}
Esempio n. 2
0
static bool is_ok_dir(const char *dirname) {
  DIR *dir;
  bool direxists = 0;
  if (am_master()) {
    direxists = (dir = opendir(dirname)) != NULL;
    if (direxists) closedir(dir);
    else mkdir(dirname, 00777);
  }
  direxists = broadcast(0, direxists);
  return !direxists;
}
Esempio n. 3
0
void master_fclose(FILE *f) {
  if (am_master()) fclose(f);
}
Esempio n. 4
0
void master_fprintf(FILE *f, const char *fmt, ...) {
  va_list ap;
  va_start(ap, fmt);
  if (am_master()) { vfprintf(f, fmt, ap); fflush(f); }
  va_end(ap);
}
Esempio n. 5
0
void trash_output_directory(const char *dirname) {
  if (am_master()) mkdir(dirname, 00777);
}