Загрузка данных



#include <stdio.h>
#include <stdlib.h>

char *
get_perms(int p, char *buf)
{
    const char *rwx = "rwx";

    if (p < 0 || p > 0777) {
        return NULL;
    }
    if (buf == NULL) {
        buf = malloc(10);
        if (buf == NULL) {
            return NULL;
        }
    }
    for (int i = 0; i < 9; ++i) {
        if (p & (0400 >> i)) {
            buf[i] = rwx[i % 3];
        } else {
            buf[i] = '-';
        }
    }
    buf[9] = '\0';
    return buf;
}

int
main(void)
{
    unsigned int p;

    if (scanf("%o", &p) != 1) {
        return 1;
    }
    if (p > 0777) {
        puts("error");
        return 1;
    }

    char *buf = get_perms((int) p, NULL);
    if (buf == NULL) {
        return 1;
    }

    puts(buf);
    free(buf);
    return 0;
}