.


:




:

































 

 

 

 





st_mode 9 . : s_Ipwww, p - (R, w X), a www - (USR, GRP OTH).

S_Ixwww x = R|W|X, www = USR|GRP|OTH

 

:

S_IRUSR,

S_IWOTH

S_ISUID set-user-id bit is set

S_ISGID set-group-id bit is set

S_ISVTX sticky bit is set

ֳ .

 

.

, .

 

#include <sys/types.h>

#include <sys/stat.h>

#include <sys/param.h>

#include <sys/param.h>

#include <sys/fcntl.h>

main

{

struct stat st;

int fd;

open(file,O_RDONLY);

for(fd=0; fd < NOFILE; fd++)

if (fstat(fd, &st ==0)

{ printf("File stats\n");

printf(" File size: %ld\n", st.st_size);

printf(" Permission: %o\n", st.st_mode & 0x01ff);

/* = 0001 1111 1111

stat(, &st);

= st.st_mode & 0777;

S_IRWXU| S_IRWXG| S_IRWXO

*/

printf(" Owner uid: %d\n", st.st_uid);

printf(" Owner gid: %d\n", st.st_gid);

printf("\n");

}

}

}

 

0..NOFILE-1 ( 0..19). fstat fd (<0), , ' ( ). NOFILE include- <sys/param.h>, .

'. fstat , .

 

3.

 

 

access (filename, mode)

char * filename;

int mode;

 

access , , pathname , , . mode - , R_OK, W_OK, X_OK F_OK.

R_OK, W_OK X_OK , , , F_OK .

0 , -1 ( - errno)

 

 

chown -

 

int chown (path, owner, group)

char * path;

int owner, group;

 

path ' . , , owner group.

ҳ root . - , . Root .

 

 

chmod -

 

# Include <sys/types.h>

# include <sys/stat.h>

 

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

int fchmod (int fildes, mode_t mode);

 

,

0777 | S_ISUID | S_ISGID | S_ISVTX

 

path ' . chmod , mode.

 

, , .

 

chown chmod , , 04000 02000 , .

 

 

, . umask, - , umask.

Umask - .

 

# Include <sys/stat.h>

mode_t umask (mode_t cmask);

 

cmask -

- 9 , umask . ³ . , umask. - ( - ), - .

 

4.

 

, , , , , , fcntl.

#include <fcntl.h>

int fcntl (int fd, int cmd, arg)

 

cmd fd.

.

 

3

cmd

F_DUPFD . , ;
F_GETFD , ;
F_SETFD , ;
F_GETFL , ;
F_SETFL , ;
F_GETLK ;
F_SETLK ;
F_SETLKW F_SETLK, ;
F_GETOWN , SIGIO
F_SETOWN , SIGIO

ij

cmd :

F_DUPFD .

F_GETFD ( ).

F_SETFD , -1.

F_GETFL .

F_SETFL , -1.

F_GETLK , -1.

F_SETLK , -1.

F_SETLKW , -1.

-1, errno .

 

 

1) , , , ?

int flags;

if((flags=fcntl (fd, F_GETFL, NULL)) < 0)

return NULL; /* fd */

flags &= O_RDONLY | O_WRONLY | O_RDWR;

switch(flags){

case O_RDONLY: return "r";

case O_WRONLY: return "w";

case O_RDWR: return "r+w";

default: return NULL;

}

 

2) :

int flags = fcntl (fd, F_GETFL, 0);

fcntl (fd, F_SETFL, flags | O_NONBLOCK);

 

3)

fcntl(fd, F_SETOWN, getpid())

 

4) setflag (int desc, int value)

{

int oldflags = fcntl (desc, F_GETFL, 0);

/* , */

if (oldflags == -1)

return -1;

/* */

if (value!= 0)

oldflags |= O_NONBLOCK;

else

oldflags &= ~O_NONBLOCK;

/* */

return fcntl (desc, F_SETFL, oldflags);

}

 

: 0, 0, .

|= ?=~ ~

, .

fcntl

 

fcntl(2) . , .

, , , . , , . .

cmd - , arg flock, . <fcntl.h>.

 

4

flock

short l_type : F_RDLCK, F_WRLCK, F_UNLCK.
short l_whence , ; (0), (1), (2)

 

4

long l_start , l_whence
long l_len , , . 0, l_start
long l_pid , ( GETLCK)
long l_sysid ,

 

, fcntl -1.

F_GETLK , , .

, , .

(advisory) ('). , , , , . fcntl() ' , .

 

:

− , , , fcntl F_RDLCK

− , , flock F_WRLCK.

− flock , , .

− ϳ F_UNLCK

 





:


: 2015-09-20; !; : 606 |


:

:

: , , , , .
==> ...

1307 - | 1208 -


© 2015-2024 lektsii.org - -

: 0.039 .