一、项目介绍 利用集成开发板,编写代码实现温湿度数据采集显示,摄像头采集图像,按键控制led小灯。 二、软件介绍 VMware、Qt 三、基本内容讲解 vim编辑器: 三种模式:命令行模式 插入模式 底行模式 vim 文件名:vim test.c 文件不存在,新建该文件并打开,如果存在就直接打开 vim打开一个文件默认是命令行模式,该模式不能编辑文本 编辑文本必须在插入模式下
命令行模式-----》插入模式 按i o a 插入模式-----》命令行模式 按esc 命令行模式-----》底行模式 shift+:
保存文本都是在底行模式下 :w 保存 :q 退出 :wq 保存并退出 :wq! 强制保存并退出
nyy : 复制n行 p : 粘贴 u : 撤销 鼠标选中要开始复制的位置,在命令行模式下按nyy,鼠标再次选择你要粘贴的位置,然后按p就会从下一行开始粘贴
gedit便捷器: gedit 文件名
编译: gcc test.c //默认生成的可执行文件名叫a.out 运行: ./a.out
gcc test.c -o test //生成的可执行文件名叫test 运行: ./test 四、Linux系统相关知识讲解 常见命令: 打开终端:ctrl+alt+t 放大:ctrl+shift+’+’ ls : 查看目录下的内容 ls -l : 查看目录下内容的详细属性 Linux下面一切皆文件,一共有七种类型的文件 d ----->文件夹 目录
----->普通文件 c ------>字符设备文件 b ------->块设备文件 p ------->管道文件 l ------->链接文件 s ------->套接字文件ls -a :查看目录下的所有内容(包含了隐藏文件 以.开头的文件)
用户的工作目录(家目录): /home/用户名 cd : 切换路径 相对路径:具体看参照路径 绝对路径:从根目录开始的路径
cd 目录:切换到该目录 cd … : 返回上一级 cd - : 快速返回上一次所在目录 cd (cd ~):快速返回家目录 cd . : 当前目录
cp 要复制的文件 目标路径 cp -r 要复制的文件夹 目标路径
mv 要移动的文件(夹) 目标路径 mv aa bb:bb如果存在,那么就是将aa移动到bb 如果不存在,就是将aa改名为bb
touch :新建普通文件 mkdir :新建文件夹 rm : 删除普通文件 rm -rf:删除文件夹 清屏:clear(ctrl+l) sudo :增加权限 向上的箭头:查看历史命令 Tab键:自动补全
五、C语言知识相关讲解 文件IO :Linux操作系统提供的一系列对文件进行操作的接口函数
文件描述符:文件的唯一标识,一般是一个整型数 0-----》标准输入 1-----》标准输出 2-----》标准错误
文件操作: (1)打开文件 open
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char * pathname, int flags); //打开一个已经存在的文件 参数1:打开的文件的路径 字符串常量 参数2:打开文件的方式 O_RDONLY 只读 O_WRONLY 只写 O_RDWR 可读可写 返回值:如果文件打开成功会返回文件描述符,打开失败会返回-1 int fd = open("./test.c",O_RDONLY); if(fd < 0) { printf("open test.c failed!\n"); } printf("open ok!fd = %d\n",fd); int open(const char *pathname, int flags, mode_t mode); //打开的是一个不存在的文件(新建的文件) 参数1:打开的文件的路径 字符串常量 参数2:打开文件的方式 O_CREAT | O_RDWR O_RDONLY 只读 O_WRONLY 只写 O_RDWR 可读可写 参数3:新建文件的权限 一般用八进制的方式表示 返回值:如果文件打开成功会返回文件描述符,打开失败会返回-1 int fd = open("./test1.c",O_CREAT | O_RDWR,0666); if(fd < 0) { perror("open"); } printf("fd = %d\n",fd);(2)关闭文件 close
#include <unistd.h> int close(int fd); 参数:文件描述符 close(fd); close(fd1);(3)读取文件内容 read
#include <unistd.h> ssize_t read(int fd, void *buf, size_t count); //从fd这个文件里面读取count个字节的内容到buf里面 参数1:要读取内容的文件的描述符 参数2:数据缓存区 (通常是数组) 参数3:读取内容的大小 返回值:如果返回值大于0,返回的就是实际读取到的字节数;返回值等于0,说明已经读到了文件末尾;返回值小于0,说明读取失败。 char buf[100] = {0}; int ret = read(fd,buf,sizeof(buf)); if(ret < 0) { perror("read"); } printf("buf : %s\n",buf);(4)写入文件 write
#include <unistd.h> ssize_t write(int fd, const void *buf, size_t count); //向fd这个文件里面写入buf的count个字节的内容 参数1:要写入内容的文件的描述符 参数2:数据缓存区 参数3:写入内容的大小 返回值:返回值大于0,返回实际写入的字节数 返回值小于0,写入失败 int ret1 = write(fd1,buf,ret);(7)完全复制一个文件的内容到另外一个文件
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <strings.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> int main() { int fd = open("./test.c",O_RDONLY); if(fd < 0) { perror("open"); return -1; } printf("open ok!fd = %d\n",fd); int fd1 = open("./day1-1/test1.c",O_CREAT | O_RDWR, 0666); if(fd1 < 0 ) { perror("open"); return -1; } printf("fd1 = %d\n",fd1); while(fd1==0){ char buf[1000] = {0}; int ret = read(fd,buf,sizeof(buf)); if(ret < 0) { perror("read"); } printf("buf : %s\n",buf); int ret1 = write(fd1,buf,ret); if(ret1 < 0) { perror("write"); } } printf("write ok!\n"); close(fd); close(fd1); return 0; }