Linux 文件IO

来源:互联网 发布:爱知日语价格 编辑:程序博客网 时间:2024/05/21 00:45
open,create:


fcntl.h
sys/types.h
sys/stat.h


int open(const char* pathname, int flags, [mode_t mode]);
flags:O_RDONLY  O_WRONLY  O_RDWR
      O_CREAT O_EXCL O_TRUNC  O_APPEND//根据[mode_t mode]中给出的权限使用


int creat(const char *pathname, mode_t mode); //mode为赋予文件的访问权限




write,read:


unistd.h


ssize_t write(int fd, const void *buffer, size_t n);//把buffer写入fd,返回实际写入的字节数


ssize_t read(int fd, void *buffer, size_t nbytes); //nbytes是从fd中读取的字节数,把fd写入buffer,返回世界写入的字节数






stat:


sys/stat.h


int stat(const char *pathname, struct stat *infobuf);
int stat(const char *path,  struct stat *infobuf);
int fstat(int fd,  struct stat *infobuf);
功能:获取文件属性
stat:通过文件路径获取
fstat:通过文件描述符获取
lstat:通过文件路径获取,若查询符号链接文件,仅查其本身属性而不是所链接文件属性。
参数:
infobuf:返回的文件属性(结构体)
返回值:成功返回0,否则返回-1


st_mode:
解释st_mode标志的掩码包括:
S_IFMT          文件类型
S_IRWXU      所属者的读/写/执行权限
S_IRWXG      所属组的读/写/执行权限
S_IRWXO      其他用户的读/写/执行权限


#define    S_IFBLK     0060000   文件是一个特殊块设备
#define    S_IFDIR      0040000   文件是一个目录
#define    S_IFCHR     0020000   文件是一个特殊的字符设备
#define    S_IFIFO       0010000   文件是一个FIFO设备
#define    S_IFREG     0100000   文件是一个普通文件
#define    S_FLNK      0120000   文件是一个符号链接


if ((infobuf.st_mode & S_IFMT) == S_IFDIR)


辅助确定文件类型的宏定义
S_ISBLK      测试是否是特殊的块设备文件
S_ISCHR      测试是否是特殊的字符设备文件
S_ISDIR       测试是否是目录
S_ISFIFO     测试是否是FIFO设备
S_ISREG      测试是否是普通文件
S_ISLNK      测试是否是符号链接文件




lseek:


unistd.h
sys/types.h


off_t lseek(int fd, off_t offset, int start_flags);//改变已打开文件的位置


offset标识新位置相对起始位置的字节数
start_flags参数含义:SEEK_SET offset是从文件的起始位置开始算,通常值为0
    SEEK_CUR offset相对文件读写的当前位置开始算,通常值为1
    SEEK_END offset相对文件尾而言,通常值为2




通过用户ID得到用户信息:
pwd.h


struct passwd *getpwuid(uid_t uid); //成功返回passwd结构体指针,否则返回NULL
 struct passwd
 {
        char *pw_name;       //用户名
        char *pw_passwd;    //用户密码
        uid_t pw_uid;            //用户ID
        gid_t pw_gid;            //用户所在组ID
        char *pw_gecos;       //真实名字
        char *pw_dir;            //用户主目录
        char *pw_shell          //用户所用Shell
  };




通过用户组ID得到用户组信息
grp.h


struct group *getgrgid(gid_t gid); //成功返回结构体指针,否则返回NULL
struct group
{
        char *gr_name;             //组名
        char *gr_passwd;          //组密码
        gid_t gr_gid;                  //组ID
        char **gr_mem;             //组成员列表
};






chmod:
sys/stat.h


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


int fchmod(int fd, mode_t mode);


chown:
unistd.h


int chown(const char *path, uid_t owner, gid_t group);\\改变文件或目录的所有者或组




link:
unistd.h


int unlink(const char *pathname);
int link(const char *path1, const char *path2);
int symlink(const char *path1, const char *path2);
int readlink(char *pathname,char *buf, int bufsize);
0 0
原创粉丝点击