LINUX软件编程(Day1)

IO:输入输出
    操作对象:文件

Linux系统一切皆是文件:
    文件分类:
    1.block     b     块设备文件        按块扫描设备信息的文件
    2.char      c     字符设备文件      按字符扫描设备信息的文件 
    3.directory d     目录文件          保存或管理文件
    4.          -     普通文件          保存数据信息的文件(代码、图片、音视频、压缩包等)
    5.link      l     链接文件          指向其他文件的文件 
    6.socket    s     套接字文件        用于进程间通信 
    7.pipe      p     管道文件          用于进程间通信

1.标准IO 

stdio.h  
    主要操作普通文件 
    1.打开文件 
    2.读写文件 
    3.关闭文件 

2.特殊的流 

     stdin       标准输入流          行缓存
    stdout      标准输出流          行缓存
    stderr      标准错误流          不缓存

    gets、getchar、scanf是基于stdin实现的
    puts、putchar、printf是基于stdout实现的 
    perror是基于stderr

3.缓存

1.全缓存    4096  4k

 缓存区满刷新
        
        与文件建立的缓存一般为全缓存

        刷新条件:
            1.缓存区存满了刷新
            2.fflush函数接口刷新
            3.关闭流时会刷新
 

 2.行缓存    1024  1k

遇到\n刷新 

        与终端建立的缓存都是行缓存

        刷新条件: 
            1.缓存区满刷新 
            2.遇到\n刷新 
            3.fflush函数刷新 
            4.关闭流时会刷新

 3.不缓存    0  0k

立即刷新 

        刷新条件:
            1.立即刷新

            1.对设备的操作不允许缓存
            2.通信不允许缓存
            3.出错处理不缓存 

4.函数接口

1.fopen  
   FILE *fopen(const char *pathname, const char *mode);

功能:
        打开pathname对应的文件并建立一个文件流
      参数:
        pathname:文件路径
        mode:打开方式
            r      只读             如果文件存在则只读打开
                                    如果文件不存在报错
            r+     读写             如果文件存在则读写打开
                                    如果文件不存在报错
            w      只写             如果文件存在则清0,只写打开 
                                    如果文件不存在则创建
            w+     写读             如果文件存在则清0,读写打开 
                                    如果文件不存在则创建
            a      追加只写         如果文件存在则追加只写打开 
                                    如果文件不存在则创建
            a+     追加读写         如果文件存在则追加读写打开 
                                    如果文件不存在则创建
      返回值:
        成功返回FILE*的指针
        失败返回NULL并且将错误码置位 

#include<stdio.h>

int main(void)
{
    FILE *fp = NULL;

    fp = fopen("a.txt","r");
    if(NULL == fp)
    {
        perror("打开a.txt文件失败");
        return -1;
    }
    return 0;
}

2.fclose

int fclose(FILE *stream);
      功能:   
        关闭流 
      参数: 
        stream:文件流
      返回值:
        成功返回0 
        失败返回EOF(-1)

FILE *fp = NULL;
 fclose(fp);

3.setvbuf 

 int setvbuf(FILE *stream, char *buf, int mode, size_t size);
      功能:
        改变流的缓存类型
      参数:
        stream:文件流
        buf:缓存区的首地址 
        mode:   
            _IOFBF  全缓存
            _IOLBF  行缓存
            _IONBF  不缓存
        size:缓存区大小
      返回值:
        成功返回0 
        失败返回非0 
 

#include<stdio.h>
int main(void)
{
    char tmpbuff[4096]  = {0};

    #if 0 
    setvbff(stdout,tmpbuff,_IOFBF,4096);
    printf("stdout被切换为全缓存\n");

    
     

    setvbuf(stdout,tmpbuff,_IOLBF,1024);
    printf("hello world!\n");
    #endif
    setvlbuf(stdout,NULL,_IONBF,0);
    printf("stdout被切换为不缓存\n");
    while (1)
    {
        /* code */
    }
    return 0;
}

   2.fgetc、fputc

int fputc(int c, FILE *stream);
      功能:
        向流中写入一个字符 
      参数:
        c:写入的字符
        stream:文件流指针
      返回值:
        成功返回写入字符的ASCII码值
        失败返回EOF(-1)

  练习:
      1.编写程序利用fputc将"hello world"写入到file.txt文件中

#include<stdio.h>

int main(void)

{
    FILE *fp = NULL;

    fp = fopen("a.txt","w");
    char str[32] = {"hello world"};
    char *p = NULL;
    p = str;
    if(NULL == fp)
    {
        perror("fopen a.txt failed");
    }
    while (*p != '\0')
    {
        fputc(*p,fp);
        p++;
    }
    

   
    fclose(fp);
    return 0;

}

 fgetc 
      int fgetc(FILE *stream);
      功能:
        从流中读取下一个字符 
      参数:
        stream:文件流指针
      返回值:
        成功返回读到字符的ASCII码值
        失败或者读到文件末尾返回EOF

#include <stdio.h>

int main(void)
{
    FILE *fp = NULL;
    int ch = 0;

    fp = fopen("a.txt", "r");
    if (NULL == fp)
    {
        perror("fail to fopen");
        return -1;
    }

    while (1)
    {
        ch = fgetc(fp);
        if (EOF == ch)
        {
            break;
        }
        printf("%c", ch);
    }

    fclose(fp);

    return 0;
}

 等价
    ch = getchar();
    ch = fgetc(stdin);

    putchar(ch);
    fputc(ch, stdout);

    3.fgets、fputs 
    4.fscanf、fprintf
    5.fread、fwrite

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值