Linux_文件操作

open系统调用:

*int open(const char path, int flags);

参数

path :文件的名称,可以包含(绝对和相对)路径

flags:文件打开模式

返回值:打开成功,返回文件描述符;打开失败,返回-1

*int open(const char path, int flags,mode_t mode);

参数

path :文件的名称,可以包含(绝对和相对)路径

flags:文件打开模式

mode: 用来规定对该文件的所有者,文件的用户组及系统中其他用户的访问权限,则文件权限为:mode&(~umask)

返回值:打开成功,返回文件描述符;打开失败,返回-1

flags:

在这里插入图片描述

modes:

在这里插入图片描述

使用write()、read()进行文件读写,调用close(fd)关闭文件

fopen函数:

FILE *fp_w;
FILE *fp_r;
//fp_w = fopen("1.cvs", "a");
fopen_s(&fp_w ,"1.csv", "a");
for (int i = 0; i < 5; i++)
{
     fprintf(fp_w, "%d,%d,%d\n", 1, 2, 3);
}
fclose(fp_w);

fopen_s在fopen的基础上加了溢出检测,更加安全。

向文件写数据:fscanf_s(fp_r, “%d,%d,%d”, &num[0], &num[1], &num[2]);

// 读取文件块数据

size_t fread(void *buffer, size_t size, size_t count, FILE *file);

// 写入文件块数据

size_t fwrite(const void *buffer, size_t size, size_t count, FILE *file);

参数:

buffer是读取与写入数据后存放地址,size是块长度,count是块的数量,实际读取长度为size*count,返回值为成功读取块的count数量。

open 与 fopen对比:

前者属于系统调用,低级IO,后者是库函数,高级IO。

前者返回一个文件描述符(用户程序区的)int,后者返回一个文件指针FILE*。

前者无缓冲,后者有缓冲。

前者与 read, write 等配合使用, 后者与 fread, fwrite等配合使用。

后者是在前者的基础上扩充而来的,在大多数情况下,用后者

stat函数:

int stat(const char *pathname, struct stat *statbuf)

用于获取文件信息,在 statbuf 指向的缓冲区中返回有关文件的信息

返回值:成功返回0;失败返回-1

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

//stat结构:
struct stat 
{
    dev_t     st_dev;         //文件使用的设备号
    ino_t     st_ino;         //索引节点号
    mode_t    st_mode;        //文件类型和模式
    nlink_t   st_nlink;       //文件的硬连接数
    uid_t     st_uid;         //所有者的用户ID
    gid_t     st_gid;         //所有者的组ID
    dev_t     st_rdev;        //设备ID
    off_t     st_size;        //以字节为单位的文件容量
    blksize_t st_blksize;     //文件系统 I/O块大小
    blkcnt_t  st_blocks;      //文件所占的磁盘块
    struct timespec st_atim;  //最后一次访问该文件的时间
    struct timespec st_mtim;  //最后一次修改该文件的时间
    struct timespec st_ctim;  //最后一次修改文件状态的时 间
 
            #define st_atime st_atim.tv_sec      /* 向后兼容 */
            #define st_mtime st_mtim.tv_sec
            #define st_ctime st_ctim.tv_sec
 };
stat结构体中的st_mode 为文件类型定义了以下掩码值:
           S_IFMT     0170000   bit mask for the file type bit field
           S_IFSOCK   0140000   socket
           S_IFLNK    0120000   symbolic link
           S_IFREG    0100000   regular file
           S_IFBLK    0060000   block device
           S_IFDIR    0040000   directory
           S_IFCHR    0020000   character device
           S_IFIFO    0010000   FIFO

POSIX 还定义了额外的宏,以允许在 st_mode 中编写文件类型的测试更简洁。
           S_ISREG(m)  is it a regular file?
           S_ISDIR(m)  directory?
           S_ISCHR(m)  character device?
           S_ISBLK(m)  block device?
           S_ISFIFO(m) FIFO (named pipe)?
           S_ISLNK(m)  symbolic link?  (Not in POSIX.1-1996.)
           S_ISSOCK(m) socket?  (Not in POSIX.1-1996.)

其他文件函数:

access 测试指定文件是否具有某种属性

chmod 修改文件权限

chown 修改文件所有者和所有组

truncate 修改文件大小

link 创建一个硬链接

symlink 创建一个软链接

readlink 读取软链接对应的文件名

unlink 删除一个硬链接

rename 重命名

lseek改变文件的偏移量

dup 文件描述符的复制,用于重定向,使新的描述符指向同一文件

dup2 成功返回newfd,失败返回-1

umask 修改打开文件的权限

fcntl 改变已打开文件的性质,针对描述符提供控制

复制一个现有的描述符

获取/设置文件描述符标记

获取/设置文件状态标记

获取/设置异步IO所有权

获取/设置记录锁

char *ttyname(int fd)

从文件描述符获得文件名
成功返回newfd,失败返回-1

umask 修改打开文件的权限

fcntl 改变已打开文件的性质,针对描述符提供控制

复制一个现有的描述符

获取/设置文件描述符标记

获取/设置文件状态标记

获取/设置异步IO所有权

获取/设置记录锁

char *ttyname(int fd)

从文件描述符获得文件名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值