Linux——文件(1)——常用的API:open write/read lseek close

这篇博客详细介绍了文件操作的基本API,包括open用于打开或创建文件,write用于写入数据,read用于读取文件内容,以及lseek用于设置文件读写位置。通过示例代码展示了如何使用这些函数,并解释了各种标志如O_RDONLY、O_WRONLY、O_RDWR、O_CREAT、O_EXCL、O_APPEND和O_TRUNC的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常用的API:open write/read lseek close

open

函数原型
Pathname:文件名 +文件路径(无路径 则默认为当前路径)
flags: O_RDONLY 只读
O_WRONLY 只写
O_RDWR 可读可写
以上三种只能指定一个。

O_CREAT 文件不存在则创建。
O_EXCL 如果同时指定了OCREAT,而文件已存在,则出错
O_APPEND 如果需要写入时不覆盖 直接在内容尾端开始写入
O_TRUNC 将文件内容清零重置 再写入

mode:使用了O_CREAT后,需要填写文件访问权限 例 0600
在这里插入图片描述
在这里插入图片描述

write read lseek

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

int main()
{
	int fd;
	char* buf="stay foolish,stay hungry";
	fd=open("./file1",O_RDWR);
	if(fd==-1){    //如果返回值是-1则打开失败
		printf("open file failed\n");
		fd =open("./file1",O_RDWR|O_CREAT,0600);  //利用O_CREAT新建一个文件
		if(fd>0){   //返回值大于0 打开成功
			printf("create file1 success!\n");
		}
	}
	printf("open success :fd=%d\n",fd);  //打印fd的值
       	int n_write=write(fd,buf,strlen(buf));
	if(n_write != -1){    //判断wirte是否写入成功
		printf("write %d byte to file\n",n_write);  //打印写入了多少个字节
	}
	
	
	char *readBuf;   //定义一个字符串指针 这里存放读到的内容
	readBuf=(char *)malloc(sizeof(char)*n_write+1);   //字符串指针未初始化的情况下需要开辟空间
	lseek(fd,0,SEEK_SET);    //这一步是为了让 光标重新回到首字符  因为write时 光标已经被推到了末尾
	int n_read=read(fd,readBuf,n_write);  //这里读取大小直接使用n_write的值
	printf("read %d ,context:%s\n",n_read,readBuf);
	close(fd);
	return 0;

}

write

 #include <unistd.h> //包含头文件

       ssize_t write(int fd, const void *buf, size_t count);
		//fd是文件描述符   字符串指针存放写入内容 可写成writebuf   size 为写入文件大小

read

#include <unistd.h>

       ssize_t read(int fd, void *buf, size_t count);
       //跟write差不多    这里的buf跟write的buf不是通用的  可以写成readbuf

lseek

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

       off_t lseek(int fd, off_t offset, int whence);
//fd都是一个意思   这里是从第几个字符开始   whence 里有三个  SEEK_SET(头) SEEK_END(末尾) SEEK_CUR(中间)

O_EXCL O_APPEND O_TRUNC

O_EXCL

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

int main()
{
        int fd;
        fd=open("./file1",O_RDWR|O_CREAT|O_EXCL,0600);
							//EXCL 配合 CREAT使用 如果文件已经存在则报错
        printf("the file cunzai\n");
        close(fd);
        return 0;

}

O_APPEND

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

int main()
{
        int fd;
        char* buf="test";
        fd=open("./file1",O_RDWR|O_APPEND);
			//                  在文末直接写入不覆盖之前的内容
        printf("open success :fd=%d\n",fd);
        int n_write=write(fd,buf,strlen(buf));
        if(n_write != -1){
                printf("write %d byte to file\n",n_write);
        }
        close(fd);
        return 0;

}

O_TRUNC

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

int main()
{
        int fd;
        char* buf="test";
        fd=open("./file1",O_RDWR|O_TRUNC);
						//将文件清零 重新写入
        printf("open success :fd=%d\n",fd);
        int n_write=write(fd,buf,strlen(buf));
        if(n_write != -1){
                printf("write %d byte to file\n",n_write);
        }
        close(fd);
        return 0;

}

CRATE

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

int main()
{
        int fd;
        char* buf="test";

        //int creat(const char *pathname, mode_t mode);
        //pathname是创建文件存放位置   mode为创建模式 常见的有 S_IRUSR 可读  S_IWUSR 可写  S_IXUSR 可执行 S_IRWXU 可读可写可执行
        fd =creat("/home/CLC/wenjian/file3",S_IRWXU);

        return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值