Files and directories
This presentation is the property of its rightful owner.
Sponsored Links
1 / 32

Files and Directories PowerPoint PPT Presentation


  • 107 Views
  • Uploaded on
  • Presentation posted in: General

Files and Directories. File types stat functions for file information File permissions suid and sgid Sticky bit Hard link and soft link Directory operations Device special files File system. File Types. Regular file Directory file Character special file (unbuffered I/O access)

Download Presentation

Files and Directories

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Files and directories

Files and Directories

  • File types

  • stat functions for file information

  • File permissions

  • suid and sgid

  • Sticky bit

  • Hard link and soft link

  • Directory operations

  • Device special files

  • File system


File types

File Types

  • Regular file

  • Directory file

  • Character special file (unbuffered I/O access)

  • Block special file (buffered I/O)

  • Named Pipe (a type of IPC) - FIFO

  • Socket (a network form of IPC)

  • Symbolic Link (a file that just points to another file)


Stat fstat and lstat

stat, fstat and lstat

int stat(const char *path, struct stat *buf);

int fstat(int filedes, struct stat *buf);

int lstat(const char *path, struct stat *buf);

  • All three return 0 on success or -1 on failure

  • All three set buf to point to a structure of information

  • stat get info about the file

  • fstat gets info about an already open file

  • lstat same as stat but if given a symbolic link will get info about the link instead of what the link points to


Stat structure

Definition on page 88

st_mode

st_ino

st_dev

st_rdev

st_nlink

st_uid

st_gid

st_size

st_blocks

st_blksize

st_atime

st_mtime

st_ctime

stat structure


Determining the type of a file

Determining the type of a file

  • Set of macros defined in <sys/stat.h> can be used.

  • They all accept the st_mode field of the stat struct as their only parameter

  • S_ISREG(mode_t mode)

  • S_ISDIR(mode_t mode)

  • S_ISCHR(mode_t mode)

  • S_ISBLK(mode_t mode)

  • S_ISFIFO(mode_t mode)

  • S_ISLNK(mode_t mode)

  • S_ISSOCK(mode_t mode)


Set user id set group id

Set-User-ID & Set-Group-ID

  • Every process has 6 or more IDs

    • Real user ID

    • Real group ID

    • Effective user ID

    • Effective group ID

    • Supplementary group IDs

    • Saved set-user-ID

    • Saved set-group-ID


Set user id set group id1

Set-User-ID & Set-Group-ID

  • Normally, effective IDs are the same as real user IDs

  • Sometimes, we need to run a process with the permissions of the user or group that owns the file (ex: passwd)

  • Two bits in the file’s mode word (st_mode) allow this.

    • set-user-ID bit

    • set-group-ID bit


Set user id set group id2

Set-User-ID & Set-Group-ID

  • When creating a file with the creat function, the new file’s UID is the effective UID of the process, and the new file’s GID is the effective GID of the process


Checking set user id and set group id bits

Checking set-user-ID and set-group-ID bits

  • Can use S_ISUID and S_ISGID masks

    Ex:

    if(S_ISUID & st_mode)

    if(S_ISGID & st_mode)


Setting suid and guid

Setting SUID and GUID

  • SUID has a value of 4

  • GUID has a value of 2

    chmod 4755 afile -rwsr-xr-x

    chmod 2755 afile -rwxr-sr-x

    chmod 6755 afile -rwsr-sr-x


File access permissions

File access permissions

  • Read section 4.5 on page 92. Note the different permissions required for operations on regular files versus directories


Access function

access function

  • Tests to see if the real user ID and real group ID allow access to a file

  • Useful if a program that may be running as another user (ex root) wants to be sure that the person that started the program has permissions to access some file

    int access(const char *pathname, int mode);

  • Returns 0 if ok, -1 otherwise


Access function cont

access function (cont)

  • In this context, mode is not the same as in previous functions. Here, mode is the bitwise OR of several constants

    • R_OK - test for read permission

    • W_OK - test for write permission

    • X_OK - test for execute permission

    • F_OK - test for file existence


Umask function

umask function

mode_t umask(mode_t mask);

  • Sets the “file mode creation mask”

  • “file mode creation mask” is used to specify the default permissions of newly created files

  • Since we are dealing with a mask it is the complement of what we want. So we set the bits corresponding to the permissions we don’t want.


Umask function1

umask function

  • When using open or creat, any bits in mode that are also set in the file creation mask are turned off.

  • All the UNIX shells also define a shell command called umask that displays the default umask set at login. Each process can change its own mask without interfering with each other


File size

File Size

  • st_size member of stat structure holds the size of a file

  • Only meaningful for regular files, directories and symbolic links

    • Regular file – number of bytes in the file

    • Directories – multiple of a number (more on this later)

    • Symbolic Links – number of chars in filename


Sticky bit

Sticky Bit

  • Historically

    • Used to tell the system to keep a copy of the “text” portion of a program in the swap space even after the program exits. (text = instructions, not data)

    • Swap file is contiguous  faster start on next execution.


Sticky bit1

Sticky Bit

  • Currently

    • Used on directories, indicates that in order to rename or delete a file in that directory a user must both have write permissions to the directory and one of the following must be true

      • User owns the file

      • User owns the directory

      • User is the superuser

  • To set the sticky bit

    • chmod +t mydir


Chmod and fchmod

chmod and fchmod

  • Allows us to change the existing permissions for a file

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

    int fchmod(int fildes, mode_t mode);

  • Returns 0 on success or -1 on failure

  • mode is bitwise OR of constants shown on page 99 fig 4.11

  • Effective UID of process must be the same as the UID of the file or the process must have superuser permissions


Link unlink remove and rename

link, unlink, remove and rename

  • linkint link(const char *oldpath, const char *newpath);

    • Creates a new hard link within the file system

    • oldpath is the file to be linked. Newpath must already exist except for the last portion which will be created

    • If all of newpath already exists, an error will be returned

    • Returns 0 if ok, -1 otherwise


Link unlink remove and rename1

link, unlink, remove and rename

  • unlinkint unlink(const char *pathname);

    • Removes directory entry indicated by pathname

    • Decrements the link count of the file

  • Must have write and execute on containing directory

  • Only when link count reaches 0 and no process has the file open will it be deleted


Link unlink remove and rename2

link, unlink, remove and rename

  • removeint remove(const char *pathname);

    • Calls unlink for files and rmdir for directories

  • renameint rename(const char *oldpath, const char *newpath);

    • Equivelant to mv shell command


Symbolic links

Symbolic Links

  • Indirect pointer to a file or directory

    • Created to get around limitations of hard links

      • Hard links must live in the same file system that the think it links to is in

      • Only superuser can hard link to a directory


Symlink and readlink

symlink and readlink

  • symlinkint symlink(const char *oldpath, const char *newpath);

    • Creates the symbolic link file newpath that contains the text contained in oldpath

    • oldpath and newpath may be on different file systems

  • readlinkssize_t readlink(const char *path, char *buf, size_t bufsiz);

    • open function follows symbolic links. readlink operates on the link file itself

    • String from file placed in buf, with number of bytes in bufsiz. String is not null terminated


File times

File Times

  • 3 times are kept for any file

    • Last access time

    • Last modified time

    • Last status change time

  • These are stored in the following fields of the stat struct

    • st_atime

    • st_mtime

    • st_ctime


Utime

utime

int utime(const char *filename, const struct utimbuf *buf);

struct utimbuf {

time_t actime;

time_t modtime;

}

  • actime and modtime are calendar times marking seconds since Epoch

  • buf may be NULL, in which case the time is updated to current system time

  • Unless using NULL for buf, just having write permissions is not enough. Effective user ID must equal owner ID or process must have superuser privileges


Directory operations

Directory Operations

  • mkdir and rmdirint mkdir(const char *pathname, mode_t mode);int rmdir(const char *pathname);

    • Create and remove the specified directory

    • For mkdir, the mode parameter is the same as those used for open. However, recall that interactions with the umask may occur!

    • When creating directories, remember that we usually want execute permissions so that the files within the directory can be listed


Reading directories

Reading Directories

DIR *opendir(const char *name);

struct dirent *readdir(DIR *dir);

void rewinddir(DIR *dir);

int closedir(DIR *dir);

off_t telldir(DIR *dir);

void seekdir(DIR *dir, off_t offset);

struct dirent {

ino_t d_ino;

char d_name[NAME_MAX + 1];

}


Chdir fchdir and getcwd

chdir fchdir and getcwd

int chdir(const char *path);

int fchdir(int fd);

  • Change the current working directory of the process

    long getcwd(char *buf, unsigned long size);

  • Get the current working directory of the process


Device special files

Device Special Files

  • Many devices are represented as files within /dev directory

  • Each device has major number and minor number for the Kernel to identify it

    • Major number usually specifies the driver to use for the device

    • Minor number may be the specific sub device or options for that device


Device special files1

Device Special Files

  • ls –lL on a device file will show major and minor numbers instead of size of file

  • st_dev and st_rdev

    • st_dev for every file is the device number under the filesystem containing that filename and its associated i-node

    • st_rdev (only for character and block special files) contains actual device number


Device special files2

Device Special Files

  • Obtaining the major and minor numbers

    • Use the major and minor macros

      • major(st_dev)

      • minor(st_dev)

    • For block and character special devices use st_rdev instead to obtain real device number


  • Login