Linux文件编程:流与操作全解析

文件编程:

用户角度:

流,stream;

编程角度:

  1. 打开文件。

  2. 读/写。(判断)

3,关闭。

Linux系统的结构

Linux系统对于文件? 设计

思想:

一切皆文件!file'

函数 打开:

man手册的使用

名字-摘要-描述-返回值;

函数 删除:

返回值:

FILE * //流指针 文件指针 代表打开了的某个文件

成功 FILE * 流指针

失败 NULL & errno 会被设置

void perror(const char *s);

功能:

可以根据errno打印对应的错误信息

打印效果:

perror("自定义的信息");

自定义信息:错误原因

会指出错误的原因:

示例:

bash 复制代码
#include<stdio.h>
int main()
{
    FILE*fp = fopen ("txt.c","r");
//
打开的方式:

 r  只读

 r+  读和写

 w  文件存在截断成0,不存在创建一个新的文件。

 w+  读写

 a   在文件末尾出写
    注意 文件存在在末尾追加的写,不存在则创建

 a+   读写
    if(NULL == fp)
    {/*
        printf("error\n");
        */
     perror("fopen fail"); 
        return 1;
    }
    printf("success\n");
    return 0;
}

关闭 文件:

实际上是个宏 相当于-1;

bash 复制代码
#include <stdio.h>
// 处理命令行参数  ./a.out    txt.c  2个参数
int main(int argc, const char* argv[])
{
  if (argc != 2)
  {
    printf("Usage : %s <filename>\n", argv[0]);
    return -1;
  }
  // open the file
  FILE* fp = fopen("txt.c", "w");
  if (NULL == fp)
  { /*
       printf("error\n");
       */
    perror("fopen fail");
    return 1;
  }
  printf("success\n");
  fclose(fp); // 函数
  return 0;
}

标准输入:

bash 复制代码
#include <stdio.h>
int main(int argc, char **argv)
{
  int ret = fgetc(stdin); // 从键盘上面输入
  printf("ret = %c:%d\n", ret, ret);



// 连续输出
  int ret =0;
  while((ret = fgetc(stdin))  != EOF) // 返回值是int类型;
{
   printf("ret = %c:%d\n", ret, ret);
}
// 运行后ctrl + d 结束
  return 0;
}

运行结果
a
ret = a:97
ret =   //包含回车 
:10
c
ret = c:99
ret = 
:10
d
ret = d:100
ret = 
:10

cat 显示函数练习:

bash 复制代码
#include <stdio.h>
int main(int argc, char **argv)
{
  if (argc != 2)
  {
    printf("Usage : %s <filename>\n", argv[0]); 给出用户解释输入方式
    return -1;
  }
打开  fopen
读写  printf
关闭  
  FILE *fp = fopen(argv[1], "r"); // 读./a.out (file) // 打开文件
  int ret = 0;
  while ((ret = fgetc(fp)) != EOF)  // 利用指针读取文件
  {
    printf("%c", ret);
  }
  fclose(fp);
  return 0;
}

标准输出:

bash 复制代码
 int ret = 0;
  while ((ret = fgetc(stdin)) != EOF)  
  {
    //  printf("%c", ret);
    fputc(ret, stdout);  代替printf
  }

  return 0;
}

练习;cp shuru.c txt2.c 复制源文件到目标文件中。

bash 复制代码
#include <stdio.h>
int main(int argc, char **argv)
{
  if (argc != 3)
  {
    printf("Usage : %s <filename>  <filename>\n", argv[0]);
    return -1;
  }
  FILE *fp_s = fopen(argv[1], "r");  // 代表打开文件
  FILE *fp_d = fopen(argv[2], "w");  
if(fp_s == NULL || fp_d == NULL)
{
  perror("fail name");
  return -1;
}

  int ret = 0;
  int ret1 = 0;
  while ((ret = fgetc(fp_s)) != EOF)
  {
    fputc(ret, fp_d);  // 输出过程是把读取的ret 写入fp_d 中。
  }
  fclose(fp_s);
  fclose(fp_d);
  return 0;
}
diff 1.c 2.c 判断是否一样
vi  1.c 2.c -d
bash 复制代码
#include <stdio.h>
int main(int argc, char **argv)
{
  char a[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
  fgets(a, sizeof(a), stdin);
  for (int i = 0; i < 10; i++)
  {
    printf("a[%d] = %c : %d\n", i, a[i], a[i]);
  }
  return 0;
}
输入hello后的 输出结果
hello
a[0] = h : 104
a[1] = e : 101
a[2] = l : 108
a[3] = l : 108
a[4] = o : 111  // 包含回车的输入
a[5] = 
 : 10
a[6] =  : 0  // '\0'结尾
a[7] =  : 1
a[8] =  : 1
a[9] =  : 1

读取终止条件的判断:

char *fgets(char *s, int size, FILE *stream);

字符串读取。

练习 用 fgets 实现 cat (显示代码)功能:

复制代码
#include <stdio.h>
int main(int argc, char **argv)
{
  if (argc != 2)
  {
    printf("Usage : %s <filename>\n", argv[0]);
    return -1;
  }
  FILE *fp = fopen(argv[1], "r");  //打开文件和以什么方式
  char a[5] = {0}; // 用字符串,每次最多读取4个字符
  char *ret = NULL;  // 用于接收fgets的返回值
  while (1)
  {
    if ((ret = fgets(a, sizeof(a), fp)) == NULL)   //读取文件,判断返回值是否为空
    {
      break;
    }
    printf("%s", a); // 不断输出字符串
  }
  fclose(fp); //关闭文件
  return 0;
}
相关推荐
重生之后端学习1 小时前
35. 搜索插入位置
java·数据结构·算法·leetcode·职场和发展·深度优先
梅孔立1 小时前
Ansible 100 台服务器一键管控实战 进阶版
服务器·git·ansible
归叶再无青1 小时前
企业级web服务(Tomcat开源web应用服务器)
运维·前端·开源·tomcat·bash
昱宸星光1 小时前
Xnio源码分析
java·jvm·spring
黑白极客1 小时前
ACP大模型认证刷题工具开源,助力高效备考
java·ai·github·llama·认证
Trouvaille ~1 小时前
【项目篇】从零手写高并发服务器(一):项目介绍与开发环境搭建
linux·运维·服务器·网络·c++·高并发·muduo库
花生柿子1 小时前
在elementui可横向滚动的table中,操作列有时候会透视下面的行
前端·javascript·elementui
!沧海@一粟!1 小时前
Kylin/Linux 服务器健康一键巡检工具
linux·服务器·kylin
程序员南飞1 小时前
算法笔试-求一个字符串的所有子串
java·开发语言·数据结构·python·算法·排序算法