当前位置: 首页 > ops >正文

Linux系统编程-DAY01

一、系统编程(大量的函数)属于应用程序编程,系统编程是操作系统走完程序后,才运行我的程序;
    底层编程中包含驱动

二、Linux系统编程包括:
    文件:
    进程:同一时刻,多个任务同时进行
    网络:
    数据库
三、标准io(io是输入输出  stdio.h)    

    从内存里出来叫输出,从键盘进去叫输入
    <> 是系统库函数,默认路径:  /user/include
    eg:---> stdio.h ---> stdio.c ---> libc.so --> /usr/ lib so动态库(lib.c so 此时是一个二进制文件,也叫库文件)
    " "是用户自定义函数,默认是当前路径
    /etc 是掌管linux所有配置的文件路径

四、标准io 
1.文件:文件操作的步骤:打开 --> 读写 --> 关闭
    2.读写文件时,往后读,系统会自动++,称为文件流指针
    3.读写相关操作: fgec/fputc  一次处理一个字符。
    4.fgets/fputs 一次处理一行,用来处理文本文件  
    5.fread/fwrite  用于处理二进制文件(如 ./a.out)
    6.r / r+ 目标文件必须存在,否则会打开失败
    7.w  目标文件存在清空 或 创建一个可写的文件
    8.w+ 目标文件可以不存在。不存在:创建;存在:清空。
    9.fgetc  ·EOF //文件读完,end of file 宏值为-1
    10.vimdiff    1.txt
    11.fgets/fputs    s代表字符串的意思,文本文件
    12.(1)char *fgets (char *s, int size, FILE *stream), size表示最多读几个。 遇到\n就终止了,因为一次读一行。读到的东西个数:size - 1个,字符串最后一个是' \0 '。读完返回null(文件到达结尾或出错,一般当作到达结尾),文本文件开空间时,大小建议开1~4K。
    (2)fputs 后面要手动加换行

五、练习
1.fputc函数

#include <stdio.h>int main(int argc, char **argv)
{FILE *fp = fopen("1.txt", "w");if(NULL == fp){fprintf(stderr, "fopen");return 1;}fputc('M', fp);fputc('e', fp);fputc('i', fp);fputc('Z', fp);fputc('u', fp);fputc('o', fp);fputc('\n', fp);fclose(fp);return 0;
}

2.fgetc函数

#include <stdio.h>int main(int argc, char **argv)
{FILE *fp = fopen("1.txt", "r");if(NULL == fp){fprintf(stderr, "fopen error\n");return 1;} while(1){int c = fgetc(fp);if(EOF == c){break;}printf("%c", c);}printf("\n");fclose(fp);return 0;
}

3.cp(fgetc和fputc)

#include <stdio.h>int main(int argc, char **argv)
{if(argc < 2){fprintf(stderr, "usage: ./a.out srcfile destfile\n");return 1;}FILE *src = fopen(argv[1], "r");FILE *dest = fopen(argv[2], "w");if(NULL == src || NULL == dest){fprintf(stderr, "fopen error\n");return 1;}int count = 0;while(1){int c = fgetc(src);if(EOF == c){break;}fputc(c, dest);count++;}fclose(src);fclose(dest);printf("%d\n",count);return 0;
}

4.fgets

#include <stdio.h>
int main(int argc, char **argv)
{if(argc < 2){fprintf(stderr, "usage: ./a.out srcfile destfile\n");return 1;}FILE *fp = fopen(argv[1], "r");if(NULL == fp){fprintf(stderr, "fopen error\n");return 1;}char buf[1024] = {0};int count = 0;while(1){if(NULL == fgets(buf, sizeof(buf), fp)){break;}count++;printf("%s", buf);}fclose(fp);printf("行数有:%d行\n", count);return 0;
}

5.fputs

#include <stdio.h>
int main(int argc, char **argv)
{FILE *fp = fopen("1.txt", "w");if(NULL == fp){fprintf(stderr, "fopen error\n");return 1;}char buf[] = "cyy ";char buf2[] = "and xiaofan";fputs("hello ", fp);fputs("\n", fp);fputs(buf, fp);fputs("\n", fp);fputs(buf2, fp);fputs("\n", fp);fclose(fp);return 0;
}

6.cp2.0(fgets和fputs)

#include <stdio.h>
int main(int argc, char **argv)
{if(argc < 2){fprintf(stderr, "usage: ./a.out srcfile destfile\n");return 1;}FILE *src = fopen(argv[1], "r");FILE *dest = fopen(argv[2], "w");if(NULL == dest || NULL == src){fprintf(stderr, "fopen error\n");return 1;}char buf[1024] = {0};while(1){   char *s = fgets(buf, sizeof(buf), src);if(NULL == s){break;}fputs(s, dest);}fclose(dest);fclose(src);return 0;
}

7.统计文本文件中a-z,出现的次数。并输出。/etc/passwd

#include <stdio.h>
int main(int argc, char **argv) 
{if (argc < 2) {fprintf(stderr, "usage is ./a.out file1 \n");return 1;}FILE *fp = fopen(argv[1], "r");if (NULL == fp) {fprintf(stderr, "fopen error\n");return 1;}int count = 0;char buf[1024] = {0};if (NULL == fgets(buf, sizeof(buf), fp)) {return 1;} else {int i;char s[100] = {0};for (i = 0; i < 26; ++i) {s[i] = i + 97;}int a[100] = {0};while(1){int c = fgetc(fp);if(EOF == c){break;}else{for(i = 0; i < 26; ++i){if(s[i] == c){a[i] += 1;}}}}fclose(fp);for(i = 0; i < 26; ++i){printf("%c = %d\n",s[i], a[i]);}}return 0;
}

http://www.xdnf.cn/news/7694.html

相关文章:

  • 动态DNS管理:【etcd+CoreDNS】 vs【BIND9】便捷性对比
  • Profinet转RS485网关赋能热敏CTP冲版机:高精度数据交互的核心解码方案​​
  • C++静态函数错误解析与修复指南练习
  • 编程技能:字符串函数08,strcmp
  • 刚刚!2025年5月WOS期刊目录已更新,新增多本期刊,剔除1本SCI期刊,慎投!
  • 软件测试期末复习
  • 深入解析OrientDB:多模型数据库的技术优势与实际应用
  • 如何从不同位置将联系人导入 iPhone(完整指南)
  • STM32定时器简单采集编码器脉冲
  • 【ubuntu服务器显卡老是坏掉】
  • BGP边界网关协议
  • 9、AI测试辅助-代码Bug分析提示词优化
  • 静态代理有哪些优势
  • 深入理解指针(一)
  • HarmonyOS实战:3秒实现一个自定义轮播图
  • 纯前端实现 导入/导出/模板下载功能
  • 变频器如何通过Profibus DP主站转Modbus RTU/TCP接入到上位机
  • DeepSeek的走红,会不会带动芯片市场新一轮增长?
  • Java中的ImageIo支持webp解析
  • 小白成长之路-Linux磁盘管理(一)
  • 如何管理和优化内核参数
  • [IMX] 07.LCD 显示
  • 【高斯函数】
  • 驱动相关基础
  • leetcode刷题日记——从前序与中序遍历序列构造二叉树
  • MES管理系统电子看板驱动企业智能制造
  • python Numpy-数组
  • 探索nsupdate:动态DNS更新的终极指南
  • 码钉枪行业2025数据分析报告
  • Java程序员从0学AI(二)