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
- linux文件操作总结(上)
- Linux 文件操作总结
- linux文件操作总结
- Linux 文件操作总结
- linux文件操作总结
- Linux 文件操作总结
- Linux 文件操作总结
- Linux 文件操作总结
- linux文件操作总结
- Linux文件操作总结
- linux文件操作总结
- Linux 文件操作总结
- Linux 文件操作总结
- 【Linux】文件操作总结
- linux文件操作总结(下)
- Linux上的文件操作
- Linux文件操作学习总结
- Linux文件操作学习总结
- (92)操作对象流ObjectStream、管道流PipedStream、任意流RandomStream
- rdc最佳实践之开发模式——git flow
- C陷阱与缺陷第四章 连接
- 新版Bintray下将Android Library 开源到JCenter 的正确姿势
- centos 6.5 安装mysql教程。
- linux文件操作总结(上)
- 基于Spring 的 Hibernate5的String 类型与Clob对应(适用于4.x)
- vue2.0 使用 filters
- HDU 5538 House Building (求表面积)
- markdown转html(使用Markdown.Converter)
- 9个最佳的大数据处理编程语言
- Maven生命周期
- 使用vuex做增删改查
- Java中从键盘输入的三种方法