【Linux】Linux文件操作基本函数

一,open函数

概述:
打开或者创建文件。成功返回file descriptor文件描述符(fd),失败返回(-1)。

open原函数:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
//两个一样
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

//用于创建文件(一般不用)
int creat(const char *pathname, mode_t mode);
const char *pathname:  文件的路径
int flags:            标志
一般用:
		O_CREAT -> 文件不存在时创建文件。
		O_APPEND -> 写文件时加到文件的尾部,不会把之前写的内容覆盖。
		O_RDONLY -> 仅可读。
		O_WRONLY -> 仅可写。
		O_RDWR -> 可读可写。

mode_t mode:		  权限
一般用:
		S_IRUSR(代表数字为4) -> 可读              4
		S_IWUSR(代表数字为2) -> 可写              2
		S_IXUSR(代表数字为1) -> 可执行             1
		S_IRWXU(代表数字为7) -> 可读,可写,可执行   7

二,write函数

概述:
根据open函数的文件描述符(fd),往里面写入内容。成功返回写入内容的字符串大小(与strlen返回值相同),失败返回(-1)。

write函数原型:

#include <unistd.h>

ssize_t write(int fd, const void *buf, size_t count);
//sszie_t 与 long int相同类型
const void *buf:缓冲区,用于临时存储写入文件的内容
(注意是无类型指针,不要局限于一种{char}类型)

size_t count: 写入文件内容大小(可以用strlen来计算)

三,read函数

概述:
根据open函数的文件描述符(fd),读取里面的内容。成功返回读取内容的字符串大小(与strlen返回值相同),失败返回(-1)。

read函数原型:

#include <unistd.h>

ssize_t read(int fd, void *buf, size_t count);

size_t count:在read函数中建议用sizeof计算

四,lseek函数

概述:
重新定位读和写文件的偏移量,就是移动光标。成功返回当前位置到开始的长度,失败返回(-1)。

lseek函数原型:

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

off_t lseek(int fd, off_t offset, int whence);
int whence:
一般用:
		SEEK_SET:The offset is set to offset bytes. offset为0时表示文件开始位置。
		SEEK_CUR:The offset is set to its current location plus offset bytes. offset为0时表示当前位置。
		SEEK_END:The offset is set to the size of the file plus offset bytes. offset为0时表示结尾位置。

五,close函数

概述:
根据open函数的文件描述符,关闭open函数打开的文件。成功返回(0),失败返回(-1)。

close函数的原型:

#include <unistd.h>

int close(int fd);

六,动态文件和静态文件

静态文件:
保存在磁盘的文件。

动态文件:
当我们(open)打开一个(file)静态文件的时候,会在linux内核里产生一个结构体来记录文件的(fd)文件描述符,(buf)内容,信息节点等,所有的read()和write()都是对动态文件进行操作,当调用close()的时候,就会把动态文件的内容保存在静态文件里。

为什么对动态文件操作,不对静态文件操做?
因为操作静态文件是按块(100个字节)读写的,不够灵活方便。操作动态文件是按字节读写,可以随机操作。

七,文件描述符

概述:
对于内核而言,所有打开文件都由文件描述符引用。文件描述符是一个非负整数。当打开一个现存文件或者创建一个新文件时,内核向进程返回一个文件描述符。当读写一个文件时,用open和creat返回的文件描述符标识该文件,将其作为参数传递给read和write。

系统默认文件描述符:

0			标准输入
1			标准输出
2			标准错误

下面为一个小练习,创建一个文件,往文件内写入"you hen shuai~":

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main()
{
        int a;
        int write_nu;
        char* readbuf;
        int read_nu;
        char* buf = "you hen shuai!\n";
        a = open("./file1",O_RDWR);
        if(a>0)
        {
                printf("OK!~~~~\n");
                printf("%d\n",a);
        }
        if(a<0)
        {
                printf("NO!~~now create!\n");
                printf("----------------\n");
                creat("./file1",0600);
                a = open("./file1",O_RDWR);
                printf("OK NOW!~~~~\n");
                printf("%d\n",a);
        }

        write_nu = write(a,buf,strlen(buf));
        if(write_nu != -1)
        {
                printf("this file has %d bye\n",write_nu);
        }

        int num = lseek(a,0,SEEK_END);//计算文件里的内容大小
        printf("num = %d\n",num);

        
        readbuf = (char*)malloc(sizeof(char)*num);

        lseek(a,0,SEEK_SET);//把光标移到文件最前面,再读
        read_nu = read(a,readbuf,sizeof(readbuf));
        printf("read:%d,context:%s\n",read_nu,readbuf);

        close(a);
        return 0;
}

结果为:
在这里插入图片描述


  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值