• 合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(二)


    目录

    基于ARM语音识别的智能家居系统

    练习一

    一、程序编译

    练习二:

    二、文件IO

    三、文件IO常用API接口函数

    1、打开文件 open()

    2、将数据内容写入文件 write()

    3、关闭(保存)文件

    四、编程示例

    总结


    基于ARM语音识别的智能家居系统

    我们上一篇讲了,关于Linux系统的一些质量,今天,我们实现在Linux系统下编译程序,我们通过两个小练习来熟悉一下。

    练习一

    熟悉基本命令的使用:
        1、在用户桌面目录下新建一个目录文件 demo/。
        2、在该目录 demo/下新建一个普通文件 hello.c。
        3、修改文件hello.c的权限为:
            对用户可读可写可执行     rwx   7
            对同组用户可写可执行     -wx   3
            对其他用户可读          r--   4
        4、将该目录 demo/ 拷贝到根目录下。

    一、程序编译

    我们编写程序实现输出hello world!!,相信大家这里的程序都会写。

    1. //#include //宏:包含导入c语言标准输入输出头文件
    2. int main() //程序入口
    3. {
    4. printf("hello world!!\n"); //在终端上打印 hello world!! 字符串
    5. return 0;
    6. }

    1. gcc: 编译器、编译c语言的工具。
    2. 编译: gcc hello.c 编译得到一个可执行文件 a.out
    3. 执行: ./可执行文件 ./a.out
    1. gcc hello.c -o bin
    2. -o:将可执行文件重命名为bin,方便使用,防止文件覆盖。

     我们在Linux系统中,运行gcc hello.c可以得到一个.out文件。如果程序有错,就会提示哪里有错。下面是GCC编译器的介绍: 

    GCC(GNU Compiler Collection)是一款免费的开源编译器,支持多种编程语言,例如C、C++、Objective-C、Fortran、Ada等。它是许多操作系统和软件的基石,包括GNU/Linux、Mac OS X、FreeBSD等。由于GCC的广泛应用和社区的庞大,它成为了业内最流行和广泛使用的编译器之一。

    GCC(GNU Compiler Collection)是一款免费的开源编译器,支持多种编程语言,例如C、C++、Objective-C、Fortran、Ada等。它是许多操作系统和软件的基石,包括GNU/Linux、Mac OS X、FreeBSD等。由于GCC的广泛应用和社区的庞大,它成为了业内最流行和广泛使用的编译器之一。

     

     

    练习二:

        使用    notpad++编写C程序,实现打印自己的姓名+学校+专业。在Ubuntu共享目录中,编译运行。
        拓展:打印99乘法表(循环)。

    我们这里的程序都比较简单,我就直接展示代码,这里主要是来练习如何用GCC编译程序,熟悉这个过程。

    1. #include
    2. int main()
    3. {
    4. int i, j;
    5. for(i = 1; i<=9; i++)
    6. {
    7. for(j = 1; j<=i; j++)
    8. {
    9. printf("%dx%d=%d ", i, j, i*j);
    10. }
    11. printf("\n");
    12. }
    13. return 0;
    14. }

    如果你得到的结果和我一模一样,就说明,你已经掌握了这个方法,接下来,我们介绍文件。

    二、文件IO

    什么是文件?
        文件就是存放数据的集合。
        比如:.txt文件 .bmp文件   .jpg文件、、、、
    
    
    Unix/Linux对数据文件(*.mp3、*.bmp),程序文件(*.c、*.h、*.o),设备文件(LCD、触摸屏、鼠标),网络文件( socket ) 等的管理都抽象为文件,使用统一的方式方法管理。

    在Linux系统中,一切皆是文件!!!

    控制一个LCD屏幕设备----》控制LCD设备对应的设备文件---》文件IO

    三、文件IO常用API接口函数

    打开文件----》对文件进行读/写操作-----》关闭(保存)文件

    1、打开文件 open()

    1. 头文件:
    2. #include
    3. #include
    4. #include
    5. 函数原型:
    6. int open(const char *pathname, int flags);
    7. 参数列表:
    8. const char *pathname:需要打开的文件路径的字符串 "./1.txt"
    9. int flags: 打开文件的方式
    10. O_RDONLY 以只读方式打开文件
    11. O_WRONLY 以只写方式打开文件
    12. O_RDWR 以可读写方式打开文件
    13. 返回值:
    14. 失败: -1,错误码errno被设置。
    15. 成功:返回一个新的文件描述符(文件的唯一标识符,遥控器)
    16. 我们就可以通过这个文件描述符操纵这个文件。

    2、将数据内容写入文件 write()

    1. 头文件:
    2. #include
    3. 函数原型:
    4. ssize_t write(int fd, const void *buf, size_t count);
    5. 从buf写入数据的内存缓冲区中 取count个字节数据 写入fd指代的文件中
    6. 参数列表:
    7. int fd:需要写入数据的目标文件的文件描述符,就是open函数的返回值。
    8. const void *buf:临时存放待写入的数据的内存缓冲区
    9. size_t count:写入的数据字节大小
    10. 返回值:
    11. 失败: -1,错误码errno被设置。
    12. 成功:返回实际写入的字节个数。

    3、关闭(保存)文件

    1. 头文件:
    2. #include
    3. 函数原型:
    4. int close(int fd);
    5. 参数列表:
    6. int fd: 需要关闭的目标文件的文件描述符。
    7. 返回值:
    8. 成功:返回0
    9. 失败:返回-1,错误码errno被设置。

    四、编程示例

    1. #include
    2. #include //open()
    3. #include
    4. #include
    5. #include //write()
    6. int main()
    7. {
    8. //1、打开文件 1.txt
    9. int fd = open("./1.txt", O_RDWR);
    10. if(fd == -1)
    11. {
    12. //printf("open file failed!");
    13. perror("open file failed!"); //通过错误码打印错误信息
    14. return -1; //程序非正常结束
    15. }
    16. //2、向文件中写入数据
    17. char buf[50] = "好好学习,天天向上!";
    18. int w_size = write(fd, buf, 50);
    19. printf("返回实际写入的字节个数: %d\n", w_size);
    20. //3、保存退出
    21. close(fd);
    22. return 0;
    23. }
    • //1、打开文件 1.txt:这是打开文件的部分。它尝试打开当前目录下的"1.txt"文件,如果文件不存在,则返回-1。
    • //通过错误码打印错误信息:这是错误处理的代码。如果在打开文件过程中发生错误,它会打印错误信息并返回-1。
    • //2、向文件中写入数据:这是向文件写入数据的部分。它创建一个字符数组buf,并写入"好好学习,天天向上!"这句话。然后使用write()函数将buf的内容写入到文件中。
    • //返回实际写入的字节个数: %d:这是打印实际写入文件字节数的部分。
    • //3、保存退出:这是关闭文件的部分。在写入数据后,使用close()函数关闭文件。

    我们这里实现了打开文件,写入文件的,最后关闭文件,今天的程序难度不大,主要还是熟悉操作。

    总结

    今天,我们主要熟悉了用GCC来编译程序和对文件的相关操作。下一篇,我们来介绍在led屏幕上显示图片。

  • 相关阅读:
    ts重点学习37-可选属性和只读属性
    数字森林:无人机航测技术在林业调查中的应用
    重构技战术(一)——通用型重构技巧
    Multi-Grade Deep Learning for Partial Differential Equations
    贪心算法 - 一点了解
    罗湖区工匠技能领军人才奖励项目申请指南
    编程大杂烩(四)
    stm32之看门狗
    #机器翻译
    浅谈游戏机制
  • 原文地址:https://blog.csdn.net/BROKEN__Y/article/details/134406124