linux文件操作总结(上)

来源:互联网 发布:网络大数据查询 编辑:程序博客网 时间:2024/06/13 04:48

文件输入输出操作

文件打开

#include<sys/types.h>#include<sys/stat.h>int open(const char *path,int flags);int open(const char *path,int flags,mode_t mode);//打开或创建的文件的文件名   打开文件的参数成功返回文件描述符,失败返回-1,错误代码存入errno

flags参数

O_RDONLY 只读打开
O_WRONLY 只写打开
O_RDWR 读写打开
三者互斥,只能选择一种

O_CREAT 文件不存在自动自动创建该文件,不过此时需要第三个参数mode
O_EXCL O_CREAT被设置时,检测文件是否存在。不存在则创建,存在则打开文件失败
O_TRUNC 文件存在并以可写的形式打开,自动清0
O_APPAND 写入的文件以追加的形式加在文件后面
O_SYNC 同步的方式打开文件,文件修改直到物理磁盘数据同步后返回
O_NOFOLLOW 如果文件为符号链接,则打开文件失败
O_DIRECTORY 如果文件不是目录,则打开失败

文件创建

#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>int create(const char *pathname,mode_t mode);// 打开或创建的文件   文件读取权限mode(mode &~ umask)(八进制)成功返回文件描述符,失败返回-1,错误代码存入errno

create();只能以可写的形式创建文件,与参数无关

文件关闭

#include<unistd.h>int close(int fd);//要关闭的文件描述符成功返回0,失败则返回-1,错误代码存入errno

读文件

#include<unistd.h>ssize_t read(int fd, void *buf, size_t count);//文件描述符  指向的缓冲区  写入的字节个数成功则返回0,失败则返回-1,错误代码存入errno

写文件

#include<unistd.h>ssize_t write(int fd, void *buf, size_t count);//文件描述符  指向的缓冲区  读取的字节个数成功则返回0,失败则返回-1,错误代码存入errno

文件指针的移动

#include<sys/types.h>#include<unistd.h>off_t lseek(int fd, off_t offset, int whence);//文件描述符  指针移动到对于参数whence表示的位置的偏移量  表示要将指针移动到的位置的参考位置文件描述符  指针移动到对于参数whence表示的位置的偏移量  表示要将指针移动到的位置的参考位置

SEEK_SET 从文章开始处计算偏移量,距离为offset
SEEK_CUR 从文件指针的当前位置计算偏移量,文件指针值为当前指针值加上offset,offset可以取负数
SEEK_END 从文件的结尾计算偏移量,offset可以取负数

文件复制

#include<unistd.h>int dup(int oldfd);int dup2(int oldfd,int newfd);//要复制的文件描述符    成功返回最小的尚未被利用的最小文件描述符,失败则返回-1,错误代码存入errno

文件控制

#include<unistd.h>#include<fcntl.h>int fcntl(int fd, int cmd, ...);int fcntl(int fd, int cmd, long arg);int fcntl(int fd, int cmd, struct flock *lock);//文件描述符   需求

fcntl函数根据cmd参数的不同有不同的功能,但都对fd表示的文件描述符进行操作。
F_DUPFD 复制由fd指向的文件描述符
F_GETTFD 获取文件描述符的close-on-exec标志
F_SETFD 获取文件描述符的close-on-exec标志为第三个参数arg的最后一位
F_GETFL 获取文件打开的方式
F_SETFL 设置文件打开方式为第三个参数arg制定方式

struct flock{    short_l_type;    //锁的类型    short_l_whence;  //偏移量的起始位置    off_t_l_start;   //开始的偏移量    off_t_l_len;     //锁的字节数    pid_t_l_pid;     //锁的主进程id}

F_SETLK 设置或者释放锁
F_SETLKW 设置或者释放锁 ,不过需要等到冲突锁释放
F_GETLK 第三个参数表示想修改的锁的属性的结构
F_GETOWN 返回当前接收SIGIO或SIGURG信号的进程ID或进程组
F_SETOWN 返回设置当前接收SIGIO或SIGURG信号,进程组ID为负数指定,进程ID用正数指定
F_GETSIG 可在输入输出时,获得发送的信号
F_SETSIG 设置输入输出发送的信号

设备控制

#include<sys/ioctl.h>int ioctl(int fd, int request, ...);// 文件描述符  要进行的操作,视参数的不同还需要在这里添加其他参

文件属性操作

获得文件属性

#include<sys/types.h>#include<sys/stat.h>#include<unistd.h>int stat(const char *restrict path, struct stat *buf);int fstat(int fd, struct *buf);int lstat(const char *restrict path, struct stat *buf);// 要获得文件属性的文件的路径  文件信息结构体若执行成功则返回0,失败则返回-1,错误代码存入errno
struct stat *buf{    dev_t st_dev;    ino_t st_ino;    mode_t st_mode;    nlink_t st_nlink;    uid_t st_uid;    gid_t st_gid;    dev_t st_size;    off_t st_size;    blksize_t st_blksize;    blkcnt_t st_blocks;    time_t st_atime;    time_t st_mtime;    time_t st_ctime;}

设置文件归属(设置文件所属的用户和用户组。)

#include<sys/types.h>#include<unistd.h>int chown(const char *path, uid_t owner, gid_t group);int fchown(int fd, uid_t owner, gid_t group);int lchown(const char *path, uid_t owner, gid_t group);//要设置的文件的路径  文件所属的用户  文件所属的用户组//文件描述符 文件所属的用户  文件所属的用户组若执行成功则返回0,失败则返回-1,错误代码存入errno

改变文件大小

#include<unistd.h>#include<sys/types.h>int truncate(const char *path, off_t length);int ftruncate(int fd, off_t length);//要改变长度的文件的路径    新的文件长度。若比原来的长度短,则截断文件,若比原来的长度长,则以二进制0填充。改变文件修改时间//要改变长度的文件的文件描述符   新的文件长度。若比原来的长度短,则截断文件,若比原来的长度长,则以二进制0填充。改变文件修改时间 若执行成功则返回0,失败则返回-1,错误代码存入errno

改变文件的访问时间和更改时间

#include<sys/types.h>#include<unistd.h>int utime(const char *path,struct utimbuf *buf);//要改变修改时间的文件的路径  新的访问时间和更改时间。若指定为NULL则不改变若执行成功则返回0,失败则返回-1,错误代码存入errno

权限屏蔽字

#include<sys/stat.h>#include<sys/types.h>int umask(mode_t mask);//要设置的新的屏蔽字返回原来的屏蔽字。

移动/删除文件

#include<inistd.h>#inlcude<stdio.h>int rename(const char *old, const char *new);int unlink(const char *path);int remove(const char *path);//文件的旧路径 文件的新路径//要删除的文件路径若执行成功则返回0,失败则返回-1,错误代码存入errno
原创粉丝点击