[ C ] mkdir: Geen writepermissions in nieuwe map

Pagina: 1
Acties:

  • Farmerwood
  • Registratie: September 2004
  • Niet online
Ik heb een vreemd probleempje met de functie mkdir in C op mijn debianbak.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <sys/types.h> 
#include <sys/stat.h> 
#include <stdio.h> 


int main()
{
    static mode_t mode = 0777;

    if( mkdir("somedir", mode  ) != 0 )
    {
      printf("Error creating directory");
    }
    else
    {
      printf("Created directory");
    }


De map somedir die gemaakt wordt zou de rechten drwxrwxrwx moeten hebben. Ik krijg echter een map met deze rechten: drwxr-xr-x. Als ik de map maak met 755 krijg ik ook drwxr-xr-x (wat dan wel weer klopt). De directory waar ik deze bestanden in heb staan heeft 775 rechten en alles staat in mijn homedir dus qua schrijfrechten is er geen probleem lijkt me.

Maar waarom krijg ik in de nieuwe map geen schrijfrechten?!? :?

btw: mode in de functie mkdir vervangen door er direct 0777 neer te zetten maakt geen verschil.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 23:37
Uit de manual:
The parameter mode specifies the permissions to use. It is modified by the process's umask in the usual way: the permissions of the created directory are (mode & ~umask & 0777).
Je werkt waarschijnlijk met een umask van 0022 (wat standaard is) waardoor altijd de write bits voor world en group uitgezet worden. Type eens 'umask 0' (waarmee je de umask van de shell op 0 zet) en run je programma dan nog eens. ;)

(Zie ook de manual over umask trouwens.)

[ Voor 17% gewijzigd door Soultaker op 12-10-2005 20:35 ]


  • Farmerwood
  • Registratie: September 2004
  • Niet online
Thanx ik zal eens kijken.

btw als ik man mkdir doe krijg ik de manual van het linuxcommando mkdir en niet van de Cfunctie mkdir..

edit: na umask 0 het programma runnen heeft idd het gewenste resultaat. :*)

[ Voor 24% gewijzigd door Farmerwood op 12-10-2005 20:45 ]


Verwijderd

Als je echter man 2 mkdir doet, dan zal het wel goedgaan. Dat is namelijk de sectie waar system calls in gedocumenteerd staan. Dat wordt ook wel met mkdir(2) aangeduid, en het commando met mkdir(1).

Zie ook umask(2), je kunt ook de umask in het proces zetten. Overigens meldt mkdir(2) hier expliciet:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
MKDIR(2)                    BSD System Calls Manual                   MKDIR(2)

NAME
     mkdir -- make a directory file

SYNOPSIS
     #include <sys/types.h>
     #include <sys/stat.h>

     int
     mkdir(const char *path, mode_t mode);

DESCRIPTION
     The directory path is created with the access permissions specified by
     mode and restricted by the umask(2) of the calling process.