在linux中打开c文件夹,linux C复习:文件操作(创建、打开、读写)

头文件:#include

1、打开文件

函数原型:

int open(const char *pathname, int flags);                                        //pathname:文件路径,flags:标记

int open(const char *pathname, int flags, mode_t mode);               //mode:权限

返回类型:成功:返回一个整数(文件描述符),打开失败(返回-1)

文件描述符:

1>一个非负整数

2>用于表示一个打开的文件

3>在内核空间被引用,并有系统调用(open)所创建

4>read、write使用文件描述符

内核缺省打开三个文件描述符

文件描述符 1:标准输出

文件描述符 2:错误输出

文件描述符 0:标准输入

flags:标记

以下三个标记在打开文件的时候必须选一个(打开文件标记):

O_RDONLY :只读打开文件

O_WRONLY:只写打开文件

O_RDWR     :读写打开文件

//-------------------------------------------------------

以下是打开文件标记:

O_CREAT:创建文件

O_EXCL:与O_CREAT组合表示:如果文件已经存在则报错

O_TRUNC:如果文件已经存在并且以下的方式打开,则清空文件0;

//------------------------------------------------------

O_APPEND:以追加的方式打开文件

file.c

clude

#include

#include

int main()

{

//以读写的方式打开文件a.txt

int fd = open("a.txt",O_RDWR);

if( -1 == fd )

perror("Error:"),exit(-1);

puts("打开文件成功");

printf("fd = %d\n",fd);

    //创建文b.txt,并设置权限

int fd2 = open("b.txt",O_CREAT|O_RDWR,0666);

printf("fd2 = %d\n",fd2);

    return 0;

}

0818b9ca8b590ca3270a3433284dd417.png

2、读文件(将文件中的内容读到内存中)\写文件(将内存中的文件写到文件中)

write.c

#include

#include

#include

#include

int main()

{

//打开文件

int fd = open("a.txt",O_RDWR|O_TRUNC);

if( -1 == fd )

perror("错误"),exit(-1);

//准备数据

int useId = 100;

char * name = "jiezhj";

double salary = 100000.0001;

//写数据,写入成功,返回写入内容的长度,

ssize_t res = write(fd,&useId,sizeof(int));

if(res <= 0)

puts("写文件错误");

write(fd,name,strlen(name));

write(fd,&salary,sizeof(double));

//关闭文件

close(fd);

return 0;

}

0818b9ca8b590ca3270a3433284dd417.png

read.c

int main()

{

//打开文件

int fd = open("a.txt",O_RDONLY);

if(-1 == fd)

perror("错误"),exit(-1);

//准备空间

int userId = 0;

char userName[20] = {0};

double salary = 0;

//按顺序读如数据

read(fd,&userId,sizeof(int));

read(fd,userName,6);

read(fd,&salary,sizeof(salary));

//输出内容

char buf[128] = {0};

sprintf(buf,"ID为%d的用户:%s的工资为%.2lf",userId,userName,salary);

puts(buf);

//关闭文件

close(fd);

}

0818b9ca8b590ca3270a3433284dd417.png

注意:

read/write函数都是系统调用函数,运行在系统态,在实际的开发中尽量不要频繁调用。

如果要频繁的输出输入大量数据,应尽量使用(缓冲区)来减少调用read/write的次数,以提高效率。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值