Хрестоматия по программированию на Си в Unix




Примеры. Хрестоматия по программированию на Си в Unix - стр. 3


/* Нарисовать горизонтальную черту */ void line(c) char c;{ register i; for(i=0; i < 78; i++) putchar(c); putchar('\n'); }

/* Обработка псевдо-имен устройств. Используются имена для XENIX */ char *drive(name) char *name; { if( eq(name, "360")) return "/dev/fd048ds9"; if( eq(name, "720")) return "/dev/fd096ds9"; if( eq(name, "1.2")) return "/dev/fd096ds15"; return name; }

/* Создать каталог */ char command[512]; /* буфер дла формирования команд */ mkdir(name, mode) char *name; { int retcode; struct stat st;

if( stat(name, &st) >= 0 && (st.st_mode & S_IFMT) == S_IFDIR ) return 0; /* уже есть */ sprintf(command, "mkdir \"%s\"", name ); retcode = system(command); /* выполнить команду, записанную в command */ chmod(name, mode & 0777); /* установить коды доступа */ return retcode; /* 0 - успешно */ }

/* Открыть файл, создавая (если надо) недостаюшие каталоги */ FILE *fmdopen(name, mode) char *name, *mode; { extern errno; char *s; FILE *fp; if( fp = fopen(name, mode)) return fp; /* OK */ /* иначе файл не смог создаться */ /* if( errno != ENOENT ) return NULL; /* из-за недостатка прав */ /* Пробуем создать все каталоги по пути к файлу */ if((s = strrchr(name, '/' )) == NULL ) return NULL; *s = '\0'; md(name); *s = '/'; return fopen(name, mode); }

/* Рекурсивный mkdir */ md(path) char *path; { struct stat st; char *s; int code; if( !*path) return 0; /* корневой каталог "/" */ if( stat(path, &st) >= 0 ){ /* существует */ if((st.st_mode & S_IFMT) == S_IFDIR) return 0; /* OK */ printf( "%s - не каталог\n", path ); return 1; /* FAIL */ } if( s = strrchr(path, '/')){ *s = '\0'; code = md(path); *s = '/'; if( code ) return code; /* Облом */ } sprintf(command, "mkdir \"%s\"", path ); return system(command); /* 0 если OK */ }

/* Сконструировать имя файла в стиле UNIX. * В MS DOS все буквы в именах - большие */ void mkname( res, n, e ) char *res, *n, *e; { /* res - результат, n - имя, e - суффикс */ register i; char *start = res;




Содержание  Назад  Вперед