文件相关的系统调用接口

记得有那么一句话,在Linux眼中一切皆文件。那么我们对于文件的相关系统调用接口就必须掌握好。

  1. open打开文件
  2. read在打开的文件中读取数据
  3. write在打开的文件中写入数据
  4. close关闭已经打开的文件

open:


int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
/*pathname:要打开或创建的文件的全路径名

  oflag:函数选项(可以是用 ' | ' 传递多个选线实现不同功能)。     

  O_RDONLY(只读打开)、

  O_WRONLY(只写打开)、

  O_RDWR(读写打开)中的一个于下列一个或多个常数

  O_APPEND: 追加到文件尾 O_CREAT: 若文件不存在则创建它。使用此选择项时,需同时说明第三个参数mode,用其说明新闻件的访问权限

  O_EXCL: 如果同时指定

  O_CREAT,而该文件又是存在的,报错;也可以测试一个文件是否存在,不存在则创建。

  O_TRUNC: 如果次文件存在,而且为读写或只写成功打开,则将其长度截短为0 O_SYNC: 使每次write都等到物理I\O操作完成。

  mode:对于open而言,仅当是用 O_CREAT 选项是才使用此参数,表示新建文件的权限设置。文件权限使用 3位 8进制数 (eg:0666)表示。

返回值:

  成功返回文件描述符,出错返回-1 。*/

实例如下:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#define WENJIAN "./text.txt"

int main ()
{
    int ret = open(WENJIAN,O_CREAT,644);
    printf("%d\n",ret);
    close(ret);
    return 0;
}

这里写图片描述

在这里我们得说一下这个open返回值的文件描述符,为什么会是3呢?
这是因为打开文件系统会默认打开0,1,2三个文件描述符分别对应标准输入、标准输出、标准错误输出。

而他们既然是文件描述符那么打开的是什么文件呢?
是键盘,显示器,显示器。有人会要问了这些怎么会是文件呢? 这就是我们第一句话了Linux中一切皆文件,键盘是文件,显示器也是文件。

write:

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

实例如下:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>

#define WENJIAN "./text.txt"

int main ()
{
    int ret = open(WENJIAN,O_CREAT | O_TRUNC | O_RDWR,0666);
    if(ret < 0)
    {
        perror("open");
        return -1;
    }
    char buf[128];
    strcpy(buf,"hello,i am a man!");
    if(write(ret,buf,strlen(buf)) < 0)
    {
        perror("write");
        return -1;
    }
    close(ret);
    return 0;
}

这里写图片描述

read:

//fd就是该文件的文件描述符,对buf空间内读取count大小的内容
ssize_t read(int fd, void *buf, size_t count);

实例如下:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>

#define WENJIAN "./text.txt"

int main ()
{
    int ret = open(WENJIAN,O_CREAT | O_TRUNC | O_RDWR,0666);
    if(ret < 0)
    {
        perror("open");
        return -1;
    }
    char buf[128];
    strcpy(buf,"hello,i am a man!");
    if(write(ret,buf,strlen(buf)) < 0)
    {
        perror("write");
        return -1;
    }
    //写完之后, 文件指针指向最后,所以我们需要调用lseek函数将文件指针指向头部。
    if(lseek(ret,0,SEEK_SET) < 0)
    {
        perror("lseek");
        return -1;
    }
    char arr[128];
    if(read(ret,arr,strlen(buf)) < 0)
    {
        perror("read");
        return -1;
    }
    printf("%s",arr);
    close(ret);
    return 0;
}

这里写图片描述

close:

 int close(int fd);//直接传入文件描述符即可。我们在上述已经实例过了就列举了,切记一点打开文件最后必须要关闭!!!!!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值