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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值