Linux下的C语言文件编程

概念引入


window ,linux如何修改一个文件,比如写一个word文档:

    打开/创建文件 -->编辑文件 -->保存文件 -->关闭文件


我们需要使用代码自动化完成以上操作: 


操作系统(linux)给我们提供了一系列的API:
打开: open
读写: read/write
光标定位: lseek
关闭: close

===========================================

文件描述符:


也就是文件的索引, 对于内核而言,所有文件都由文件描述符引用。 文件描述符是一个非负整数。
打开/创建文件-- 返回文件描述符
读写文件需要文件描述符作为参数传递

注意:  文件描述符的作用域是当前进程 ,出了这个进程文件,描述符没有任何意义

linux 系统默认文件描述符
 0 -- >标准输入(也就是键盘) 1-->标准输出   2 -->标准错误, so我们open文件的时候返回的fd从3开始 
 0  1  2对应的宏分别为:  STDIN_FILENO   STDOUT_FILENO  STDERR_FILENO

------------------
编程应用:
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>

int main()
{
 char readBuf[128];
 read(0,readBuf,5);
 write(1,readBuf,strlen(readBuf));


 puts("");
  return 0;
}
--------------------------------
 注意: 使用完文件后,要close() 关闭,防止文件损坏

存在磁盘中的文件  -- 静态文件
open 静态文件 后,在linux 内核产生结构体,来存放fd,buf(内存)等数据 -- 这时候就是动态文件
调用close() -- 会把缓冲区buf的所有东西写入磁盘中
// 为什么需要动态文件:磁盘的最小读取单位就是一个块。属于块设备
快设别十分的不灵活,是快读写,而内存是按字节单位操作的,而且可以随机操作,很灵活


打开/创建文件:

打开文件open()

返回值 --文件描述符,起到索引作用


需要头文件: 
<sys/types.h><sys/stat.h> <fcntl.h>

函数原型

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


pathname --要打开的的文件路径,可省略--当前路径
flags 打开方式:O_RDONLY     只读打开           O_WRONLY   只写打开       O_RDWR 可读可写
以上常数只能指定一个 ,但是以下常数可选择:
flags|后续常数:
O_CREAT -- 若文件不存在就创建他
O_EXCK 如果同时指定了O_CRATE,文件已经存在,则返回值为-1 --> 判断文件是否存在
O_APPEND  -- 从文件的末尾写入数据 -- 如果不加 append 的话,原来的内容可能会被覆盖
O_TRUNC  属性去打开文件时,if这个文件是有内容的,而且为只读or只写成功打开。则将其长度截短为0
 --意识就是清空文件,然后重写写入内容

mode: 文件权限:
常用 权限:
1.可读   r  --4
2.可写   w --2
3.执行:x  --1
比如6:  4+2 rw_

0600 -- 给文件所有者读写权限

-------------------------------------------------------

为了简化表达,我们还可以采取数字表示代替ugo,二进制0~7代表三种权限:
把rwx记为421 : r-4 w-2 x-1
0:无任何权限 000 ---
1: 只有x权限 000 --x 
2:只有w权限 010 -w-
3:011 -wx
4:100 r--
5: 101 r-x  
6: 110    rw-
7:全部权限:111 rwx
————————————————

文件权限详细理解和操作,建议移步 3 linux

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值