linux文件操作

一 文件的基本操作

1 文件打开操作
//open需要包含的头文件
       #include <sys/types.h>
       #include <sys/stat.h>
       #include <fcntl.h>
       int open(const char *pathname, int flags);
          //需要打开的文件名(包含路径)//文件权限 只读O_RDONLY    只写O_WRONLY   可读可写O_RDWR
         //返回文件描述符
       int open(const char *pathname, int flags, mode_t mode);


2 文件写入操作
//write需要包含的头文件
       #include <unistd.h>
       ssize_t write(int fd, const void *buf, size_t count);
    //向open返回的文件描述符里 写buf  写count这么大

3 文件读取操作
//read需要包含的头文件
       #include <unistd.h>
       ssize_t read(int fd, void *buf, size_t count);
    //从fd中读取内容到buf中  读count这么大

4 文件光标操作
//lseek需要包含的头文件
       #include <sys/types.h>
       #include <unistd.h>
       off_t lseek(int fd, off_t offset, int whence);
    //操作的文件  //偏移值    //光标的位置 SEEK_SET文件头   SEEK_END 文件尾  SEEK_CUR当前光标位置
    //lseek 返回的偏移量

5.判断文件是否存在
//O_EXCL与O_CREAT连用 判断文件是否存在    
    fd = open("./file",O_RDWR|O_CREAT|O_EXCL,0600);
    //如果file存在 返回-1
    //如果file不存在 啥都不返回

6.在原文件后追加内容
//O_APPEND
    fd = open("./file",O_RDWR|O_APPEND);

7.把原文件内容换掉
//O_TRUNC
    fd = open("./file",O_RDWR|O_TRUNC

8.创建文件
//creat
      int creat(const char *pathname, mode_t mode);
    //要创建的文件名        //创建模式 1可读S_IRUSR  2可写S_IWUSR  3可执行S_IXUSR   4可读可写可执行S_IRWXU     

二 文件描述符:
1.对于内核而言,所有打开文件都是由文件描述符引用的。文件描述符都是一个非负整数。当打开一个现存文件或创建一个新文件时,内核向进程返回一个文件描述符。用open和creat返回的文件描述符标识该文件,将其作为参数传递给read和write.
2.文件描述符的作用域就是当前进程,出了这个进程文件描述符就没有意义了。
Linux系统默认:0代表进程的标准输入(键盘输入)
             1代表进程的标准输出
             2代表进程的标准错误
文件的过程:
1.文件平时是存放在块设备中的文件系统文件中的(磁盘中),我们把这种文件叫静态文件,当我们去open一个文件时,linux内核做的操作包括:内核在进程中建立一个文件的数据结构(结构体),记录下我们打开的文件;内核在内存中申请一段内存,并且将静态文件的内容从块设备中读取到内核中特定地址管理存放(叫动态文件)。
2.打开文件以后,以后对这个文件的操作,都是针对内存中的这一份动态文件的,而不是针对静态文件的。当然我们对动态文件进行读写以后,此时内存中动态文件和块设备文件中的静态文件就不同步了,当我们close关闭动态文件时,close内部内核将内存中的动态文件的内容去更新(同步)块设备中的静态文件。
3.为什么这么设计,不直接对块设备直接操作?块设备本身读写非常不灵敏,是按块读写的(块字节比较大),而内存是按字节单位操作的,而且可以随机操作,很灵敏。


三 实现Linux cp命令的代码
    a.打开一个原文件(src.c)argv[1]
    b.读原文件(src.c)->buf中
    c.创建目标文件(des.c)argv[2]
    d.将buf写到目标文件(des.c)
    e.close两个文件

 

四 配置文件修改
    a.打开配置文件
    b.读配置文件->buf中
    c.在buf中修改
    d.修改完再写到配置文件中
    e.close配置文件

 

 

五 标准C库
1.来源角度:open是linux系统调用函数,返回的是文件描述符。
       fopen是标准的C语言库函数,在不同的操作系统中应该调用不同的api。返回的是一个指向文件结构的指针。
2.移植性:在linux系统,用open.在windows用creatFile。
    fopen是C标准函数,因此拥有良好的移植性。
3.  fopen    
       #include <stdio.h>
       FILE *fopen(const char *path, const char *mode);
//    FILE *fp = fopen("文件名","w+");
//返回文件流      //文件名               //权限

4.fwrite
    #include <stdio.h>
    size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
        //要写的数据缓存     //2,3表示 字节数        //写到这里
    //fwrite(str,sizeof(char),strlen(str),fp)
    //fwrite(str,sizeof(char)*strlen(str),1,fp)
5.fread
       #include <stdio.h>
       size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);    
           //读到这里    //2,3读这么大    //读到这里
    //fread(readBuf,sizeof(char),strlen(str),fp);
6.fseek
       #include <stdio.h>
       int fseek(FILE *stream, long offset, int whence);
    //操作的文件     //偏移量    //位置    
    //fseek(fp,0,SEEK_SET);
7.fputc
       #include <stdio.h>
       int fputc(int c, FILE *stream);
    //向FILE *stream 写入int c
8.feof
判断是否到文件尾巴
没有到达文件尾巴返回0

9.fgetc
      int fgetc(FILE *stream);
    //从FILE *stream输出
 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值