Unix高级环境编程学习笔记(二):文件和目录

1 stat,fstat,lstat函数

#include<sys/stat.h>
int stat (const char* restrict pathname, struct stat *restrict buf);
int fstat (int filedes, struct stat * buf);
int lstat (const char* restrict pathname, struct stat *restrict buf);

成功返回0,失败返回-1
 
stat返回pathname上指定的文件的信息结构,fstat返回文件描述符指定文件的信息结构,lstat返回符号连接文件的信息结构,而不是符号连接指向的文件的信息结构

2 lstat练习

#include<stdio.h>
#include<sys/stat.h>
int main(int argc, char* argv[])
{
  char* ptr;
  int i;
  struct stat buf;
  for(i=1;i<argc;i++)
    {
      printf("%s:",argv[i]);
      if((      lstat(argv[i], &buf))<0)
    {
      printf("error:lstat");
      continue;
    }
      if(S_ISREG(buf.st_mode))
    ptr = "regular";
      else if(S_ISDIR(buf.st_mode))
    ptr = "directory";
      else if (S_ISCHR(buf.st_mode))
    ptr = "character special";
      else if(S_ISBLK(buf.st_mode))
    ptr = "block special";
      else if(S_ISFIFO(buf.st_mode))
    ptr = "fifo";
      else if(S_ISLNK(buf.st_mode))
    ptr = "link";
      else if(S_ISSOCK(buf.st_mode))
    ptr = "socket";

      printf("%s\n",ptr);
    }
  return 0;
}

3 所有者和组所有者

文件的所有者由st_uid标识,组所有者由st_gid标识

4 创建一个文件的用户id会被设置为进程的有效用户id,组id可能是进程的有效组id,也可能是文件所在目录的有效组id

5 access函数用于测试实际用户id对一个文件的访问

#include<unistd.h>
int access (const char* pathname ,int mode);

成功返回0,失败返回-1
mode的取值
R_OK, W_OK, X_OK, F_OK(测试文件是否存在)

6 chmod和fchmod函数,改变文件访问权限

#include<sys/stat.h>
int chmod(const char* pathname, mode_t mode);
int fchmode(int filedes, mode_t mode)

成功返回0,失败返回-1

实例:
chmode("bar", S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
为bar增加用户的读写权限,和组及其他的读权限

7 粘住位

当这一位被设置了,该程序第一次被执行并结束时,程序正文部分仍然保存在交换区,使得下次执行程序能较快装入内存区,因为交换区占据连续磁盘空间,而一般的数据往往随机存放
S_ISVTX = SaVed TeXt

8 chown, fchown, lchown, 改变文件用户ID和组ID

#include<unistd.h>
int chown(const char * pathname, uid_t owner, gid_t group)
int fchown(int filedes, uid_t owner, gid_t group)
int lchown(const char* pathname, uid_t owner, gid_t group)
时间: 2024-08-01 12:50:08

Unix高级环境编程学习笔记(二):文件和目录的相关文章

UNIX高级环境编程学习

1-5实例 控制字符:ctrl + 另一个键.control + D或者^D是默认的文件结束符.

Linux System Programming 学习笔记(二) 文件I/O

1.每个Linux进程都有一个最大打开文件数,默认情况下,最大值是1024 文件描述符不仅可以引用普通文件,也可以引用套接字socket,目录,管道(everything is a file) 默认情况下,子进程会获得其父进程文件表的完整拷贝 2.打开文件 open系统调用必须包含 O_RDONLY,O_WRONLY,O_RDWR 三种存取模式之一 注意 O_NONBLOCK模式 int fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0644

《unix高级环境编程》终端 I/O——终端 IO 基本概述

终端基本概念 终端 IO 是一种字符型设备,终端特殊设备文件一般有以下几种: 串行端口终端:是使用计算机串行端口连接的设备,计算机把每个串行端口都看作是一个字符设备.串行端口所对应的设备名称 /dev/ttySn(n表示从0开始的整数): 伪终端:是成对的逻辑终端设备,例如 /dev/ptyp3 和/ dev/ttyp3(在设备文件系统中分别是 /dev/pty/m3 和/ dev/pty/s3 ),它们与实际物理设备并不直接相关: 控制终端:是当前进程的控制终端的设备特殊文件 /dev/tty

APUE 学习笔记(二) 文件I/O

1. 文件I/O 对于内核而言,所有打开的文件都通过文件描述符引用,内核不区分文本文件和二进制文件 open函数:O_RDONLY  O_WRONLY  O_RDWR create函数: close函数:关闭一个文件时还会释放该进程加在该文件上的所有记录锁 lseek函数:显式地为一个打开的文件设置其偏移量 每个打开的文件都有一个与其相关联的 "当前文件偏移量",用以度量从文件开始处计算的字节数,通常,读.写操作都从当前文件偏移量处开始,并使偏移量增加所读写的字节数 文件偏移量可以大于

Linux 程序设计学习笔记----POSIX 文件及目录管理

转载请注明:http://blog.csdn.net/suool/article/details/38141047 问题引入 文件流和文件描述符的区别 上节讲到ANSI C 库函数的实现在用户态,流的相应资源也在用户空间,但无论如何实现最终都需要通过内核实现对文件的读写控制.因此fopen函数必然调用了对OS的系统调用.这一调用在LINUX下即为open, close, read, write等函数.这些都遵循POSIX标准. so,在linux系统中是如何通过POSIX标准实现对文件的操作和目

Linux System Programming 学习笔记(八) 文件和目录管理

1. 文件和元数据 每个文件都是通过inode引用,每个inode索引节点都具有文件系统中唯一的inode number 一个inode索引节点是存储在Linux文件系统的磁盘介质上的物理对象,也是LInux内核通过数据结构表示的实体 inode存储相关联文件的元数据 ls -i 命令获取文件的inode number /* obtaining the metadata of a file */ #include <sys/types.h> #include <sys/stat.h>

python学习笔记九——文件与目录

1.python进行文件读写的函数是open或file类 mode:r  只读 r+   读写 w  写入,先删除原文件,再重新写入,如果文件没有则创建 w+  读写,先删除原文件,再重新写入,如果文件没有则创建(可写入和输出) a  写入,在文件末尾追加新的内容,文件不存在则创建 a+  读写,在文件末尾追加新的内容,文件不存在则创建 b  打开二进制文件,可与r,w,a,+结合使用 U  支持所有的换行符号,"\r","\n","\r\n"

UNIX环境编程学习笔记(6)——文件I/O之判断文件类型

lienhua342014-09-01 1 文件类型 我们平时最常接触的文件类型有普通文件(regular file)和目录(di-rectory file),但是 UNIX 系统提供了多种文件类型: (1) 普通文件(regular file) 这种文件包含了某种形式的数据,这些数据无论是文件还是二进制对于 UNIX 内核而言都是一样的.对普通文件内容的解释有处理该文件的应用程序进行. (2) 目录文件(directory file) 目录文件包含了其他文件的名字以及指向与这些文件有关信息的指

UNIX环境编程学习笔记(7)——文件I/O之文件访问权限与进程访问控制

lienhua342014-09-02 1 文件的设置用户 ID位 和设置组 ID位 与进程相关联的 ID 如下表所示, 表 1: 与进程相关联的用户 ID 和组 ID 实际用户 ID 我们实际上是谁 实际组 ID 有效用户 ID 用于文件访问权限检查 有效组 ID 附加组 ID 保存的设置用户 ID 由 exec 函数保存 保存的设置组 ID 保存的设置用户 ID 和保存的设置组 ID 在执行一个程序时包含了有效用户 ID 和有效组 ID 的副本,这个后面我们学习到进程时在详细学习. 此处,我