Linux系统open、close、read、write函数

open函数

所需头文件:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

// 打开一个已经存在的文件
int open(const char *pathname, int flags);
参数:

  • pathname:要打开的文件路径
  • flag:文件的操作权限,如:O_RDONLY 只读,O_WRONLY 只写,O_RDWR 读写

返回值:返回一个新的文件描述符,失败返回-1

// 创建一个新的文件
int open(const char *pathname, int flags, mode_t mode);
参数:

  • pathname:要打开的文件路径

  • flag:文件的操作权限,
    必选项:O_RDONLY, O_WRONLY, O_RDWR 这三个之间是互斥的
    可选项:O_CREAT 文件不存在,创建新文件

  • mode:创建文件时赋予文件的基本权限如0777,0664,第一个代表用户权限,第二个代表同组权限,最后一个代表其他组的权限
    rwx权值分别为421,r-read,w-write,x-execute运行,7=4+2+1即读写和运行权都有,6=4+2即读写权
    即0777表示,该用户、同组用户、其他组用户的权限均为读写运行权。0664表示该用户和同组用户的权限为读写权,其他组只有读的权限。

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


int main(){
    // int open(const char *pathname, int flags, mode_t mode);
    // int open(const char *pathname, int flags); 

    //创建一个新文件
    //int fd=open("a.txt",O_RDWR|O_CREAT,0664);
    //打开已有文件
    int fd=open("a.txt",O_RDONLY);
    if(fd==-1){
        perror("open");//open:xxxx
        exit(-1);
    }
    
    printf("sucess fd=%d\n",fd);
	//close(fd);
    return 0;
}

close函数

所需头文件
#include <unistd.h>
//关闭文件描述符为fd的文件
int close(int fd);

read函数

所需头文件:
#include <unistd.h>

//read一个文件
ssize_t read(int fd, void *buf, size_t count);
参数:

  • fd:文件描述符
  • buf:需要读取数据存放的地方,数组的地址(传出参数)
  • count:指定的数组的大小

返回值:

  • 成功:1)>0: 返回实际的读取到的字节数 2)=0:文件已经读取完了
  • 失败:-1 ,并且设置errno

write函数

所需头文件:
#include <unistd.h>

//写入一个文件
ssize_t write(int fd, const void *buf, size_t count);
参数:

  • fd:文件描述符
  • buf:要往磁盘写入的数据,数据
  • count:要写的数据的实际的大小

返回值:

  • 成功:实际写入的字节数
  • 失败:返回-1,并设置errno

将已经存在的a.txt文件内容复制到b.txt中,b.txt可以不存在

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


int main(){
    // ssize_t read(int fd, void *buf, size_t count);
    // ssize_t write(int fd, const void *buf, size_t count);

    //打开已有文件
    int srcfd=open("a.txt",O_RDONLY);
    if(srcfd==-1){
        perror("open");//open:xxxx
        exit(-1);
    }
    
    //创建一个新的文件
    int desfd=open("b.txt",O_WRONLY|O_CREAT,0664);
    if(desfd==-1){
        perror("open");//open:xxxx
        exit(-1);
    }
    
    //读写操作
    char buf[1024]={0};
    int len=0;

    while ((len =read(srcfd, buf, sizeof(buf)))>0)
    {
        printf("len = %d buf = %s\n", len, buf);
        int ret=write(desfd, buf, len);
        if(ret== -1){
            perror("write");
            exit(-1);
        }
    }

    //关闭文件
    close(desfd);
    close(srcfd);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吾酥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值