嵌入式学习第十八天——Linux高级编程

标准io

标准输入输出(Standard Input/Output,简称 I/O)是编程中用于数据交换的一种基本概念

标准输入  

通常是键盘输入,但也可以是重定向的文件或其他输入源。

标准输出 

用于将数据发送到终端或另一个输出设备,显示器是标准输出设备

Linux操作系统当中IO都是对文件的操作

文件

概念:linux中一切都是文件。

作用:文件用来存储数据(数据,指令) 

文件类型包括普通文件、目录文件、字符设备文件、块设备文件、符号链接、管道、套接字等

相关函数

标准IO:

ANSI C 设计的一组用文件IO 封装的操作库函数

头文件: stdio.h  ==》标准输入输出头文件

         /usr/include/stdio.h

<>   是系统库函数,默认路径在/usr/include/

" "   是用户自定义函数,默认是当前路径

如果不了解函数的用法,可以通过man手册进行查询

用法:man 1 xxx ===>查看当前xxx命令

大多数情况只用 1(shell命令)、2(系统调用)、3(库函数)三个部分来查找函数就足够了

fgetc/fputc 

是C语言标准库中的函数,用于从文件中读取单个字符和向文件写入单个字符。

函数原型:int fgetc(FILE *stream);

返回值:

成功读取时返回读取的字符的ASCII码。

到达文件末尾或发生错误时返回EOF(通常是-1)

#include <stdio.h>

int main() 
{
    FILE *file = fopen("example.txt", "r");
    if (file == NULL)
    {
        perror("Error opening file");
        return -1;
    }

    int ch;
    while ((ch = fgetc(file)) != EOF) 
    {
        putchar(ch); // 将读取的字符输出到标准输出
    }

    fclose(file);
    return 0;
}

函数原型:int fputc(int c, FILE *stream); 

#include <stdio.h>

int main() 
{
    FILE *file = fopen("output.txt", "w");
    if (file == NULL) 
    {
        perror("Error opening file");
        return -1;
    }

    int ch = 'A'; // 要写入的字符
    if (fputc(ch, file) == EOF) 
    {
        perror("Error writing to file");
        fclose(file);
        return -1;
    }

    fclose(file);
    return 0;
}

 fgets/fputs 

用于从文件中读取字符串和向文件写入字符串。

函数原型:char *fgets(char *str, int num, FILE *stream);

#include <stdio.h>
int main(int argc, char *argv[])
{

    FILE * fp = fopen("/etc/passwd","r");
    if(NULL == fp)
    {
        printf("fopen error\n");
        return 1;
    }
    char buf[1024]={0};// 1k-4k
    while(1)
    {
        char* s = fgets(buf,sizeof(buf),fp);
        if(NULL == s)
        {
            break;
        }
        printf("%s\n",buf);
    }
    fclose(fp);
    return 0;
}

函数原型:int fputs(const char *str, FILE *stream);

#include <stdio.h>

int main(int argc, char *argv[])
{

    FILE * fp = fopen("1.txt","w");
    if(NULL == fp)
    {
        printf("fopen error\n");
        return 1;
    }
    char data[]="hello,world";
    int ret = fputs(data,fp);
    if(EOF == ret)
    {
        printf("fputs error\n");
        return 1;
    }
    fclose(fp);
    return 0;
}

fread/fwrite 

 函数原型:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

#include <stdio.h>
#include <string.h>
typedef struct 
{
    char name[50];
    int age;
    char phone[15];
}PER;

int main(int argc, char *argv[])
{

    FILE * fp = fopen("1.txt","r");
    if(NULL == fp)
    {
        printf("fopen error\n");
        return 1;
    }
    PER per;
    bzero(&per,sizeof(per));
    size_t ret= fread(&per,sizeof(per),1,fp);
    printf("name:%s age:%d phone:%s\n",per.name,per.age,per.phone);
    if(ret!=1)
    {
        printf("fread error\n");
        return 1;
    }
    fclose(fp);
    return 0;
}

 

 函数原型:size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

#include <stdio.h>
#include <string.h>
typedef struct 
{
    char name[50];
    int age;
    char phone[15];
}PER;

int main(int argc, char *argv[])
{

    FILE * fp = fopen("1.txt","w");
    if(NULL == fp)
    {
        printf("fopen error\n");
        return 1;
    }
    PER per;
    strcpy(per.name ,"zhangsan");
    per.age = 20;
    strcpy(per.phone,"111222333");
    size_t ret = fwrite(&per,sizeof(per),1,fp);
    if(ret!=1)
    {
        printf("fwrite error\n");
        return 1;
    }
    fclose(fp);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值