Linux文件编程学习笔记

文件编程概述:

 (文件原理及访问机制,文件在内核中的管理机制,什么是文件信息节点,文件共享,文件权限,各用户对其权限)罗里吧嗦,对新手不友好,适合会编程后优化深究。

学习用代码管理文件(打开,编辑,保存,关闭)打开open读写read、write光标定位lseek关闭close

文件打开及创建:

 文件描述符(file descriptor)文件索引作用

终端man open 查看open函数

open函数返回文件描述符,返回-1代表打开失败,1为文件路径及名称,2为权限(O_RDONLY,O_WRONLY,O_RDWR可选项O_CREAT,O_EXCL,O_APPEND,O_TRUNC)创建时有第三个参数mode,通常为0600,读4写2执行1,文件所有者,同组用户,其他组

EXCL和CREAT一起使用,文件存在时返回-1

TRUNC将文件清空重写

ls -l  rwx可读可写可执行

文件写入编程:

<unistd.h>

write( fd,  const  void *buf  ,  count)

将2中3个字节写入1的文件中,返回写入字节数.错误返回-1

const表明定义变量只有只读特性const int i=5和int const i=5均可

linux下指针长度8个字节

文件写入后必须close关闭,否则会数据错乱。

文件读取操作:

read(fd, buf ,count)

从1中读取3个字节到2中,返回读取字节数。错误返回-1

文件关闭后再打开,光标从头开始。

写入后立马读取读不到内容,光标在最后。

文件光标移动

关闭再打开文件很土

lseek(fd,offset,whence)

3:SEEK_SET,SEEK_CUR,SEEK_END(文件头,当前,文件尾)

将光标移到3偏移2(左负右正),返回光标离文件头位置数。

可计算文件大小。

文件操作原理简述

linux系统默认文件描述符0标准输入1标准输出2标准错误(对内核)

文件描述符只对当前进程有效

文件分为动态文件,静态文件。open静态文件后内核产生结构体将文件内容栽到内存中,read,write都是对动态文件修改,close后再更新静态文件。块设备本身读写不灵活,按块读写,内存是按字节单位操作,随机灵活。

open函数其实是向内核发送指令,内核完成具体打开操作。

文件操作小应用实现cp指令

  1. 打开a文件
  2. 读a到buf
  3. 打开/创建b文件(TRUNC)
  4. buf写入到b文件
  5. close两文件

main函数参数(int argc,char** argv)参数个数,argv【1】第一个字符数组

修改程序的配置文件

strstr(str1,str2)

1中找2,返回首字母指针

exit(-1)终止调用当前进程,-1为返回给父进程的状态值。

写一个整数(结构体)到文件

write、read函数不止可以写字符,还可写整数,结构体,vi打开后会显示乱码,但不影响系统对数据的判断

标准c库对文件操作引入

open函数是unix系统调用函数,返回文件描述符,是文件索引。

fopen是c语言库函数,返回指向文件结构体的指针,有良好移植性。

fopen在用户态下有缓冲,内存缓冲区大,则操作外存次数越少,执行速度快,效率高。

标准c库打开文件读写光标移动

r只读 rb只读打开二进制文件

w只写 wb

a追加 ab

r+可读可写打开 rb+

w+可读可写创建 wb+

a+可读可追加打开 ab+

<stdio.h>

<string.h>

FILE *fp=fopen(./a.txt, w+)

fwrite(str, sizeof(char), strlen(str), fp)

1写入指针起始位置,2为一次写入字节数,3写入次数,4文件描述符

返回值为写入次数(=3)

fread(readbuf, sizeof(char), strlen(str), fp)

返回值为读取次数(可能小于3)

读写结构体的时候2用sizeof(struct test),3为1

fseek(fd,0,SEEK_SET)

fclose(fp)

文件及其他函数讲解

fputc(“a”,fp)

将1写入2所指文件,并将内部写指针自动后移一个字节

feof(fp)

检测流上的文件结束符,文件结束返回0,否则返回非0

fgetc(fp)

从fp指向文件中读取一个字符,并将光标后移一个字节。

Linux一切皆文件。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值