File: creation-mask.c

/**
 * crea due nuovi file con la stessa maschera dei permessi ma con maschere di
 * creazione (umask) differenti
 *
 * nota: controllare i permessi effettivi applicati ai file dalla shell con:
 * > ./creation-mask
 * > ls -l test1.txt test2.txt
 */
 
#include "lib-misc.h"
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
 
#define RWRWRW_MASK (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
 
int main(int argc, char *argv[]) {
    // azzera la maschera di creazione: tutti i permessi sono autorizzati
    umask(0);
 
    if (creat("test1.txt", RWRWRW_MASK) < 0)
        exit_with_sys_err("test1.txt");
 
    // inibisce la possibilità di dare permessi di lettura e scrittura al gruppo
    // e agli altri in fase di creazione di file e cartelle
    umask(S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
 
    if (creat("test2.txt", RWRWRW_MASK) < 0)
        exit_with_sys_err("test2.txt");
 
    exit(EXIT_SUCCESS);
}