目錄
基于ARM語音識別的智能家居系統(tǒng)
練習一
一、程序編譯
練習二:
二、文件IO
三、文件IO常用API接口函數(shù)
1、打開文件 open()
2、將數(shù)據(jù)內(nèi)容寫入文件 write()
3、關(guān)閉(保存)文件
四、編程示例
總結(jié)
基于ARM語音識別的智能家居系統(tǒng)
我們上一篇講了,關(guān)于Linux系統(tǒng)的一些質(zhì)量,今天,我們實現(xiàn)在Linux系統(tǒng)下編譯程序,我們通過兩個小練習來熟悉一下。
練習一
熟悉基本命令的使用:
?? ?1、在用戶桌面目錄下新建一個目錄文件 demo/。
? ? 2、在該目錄 demo/下新建一個普通文件 hello.c。
? ? 3、修改文件hello.c的權(quán)限為:
? ? ?? ?對用戶可讀可寫可執(zhí)行 ? ? rwx ? 7
? ? ?? ?對同組用戶可寫可執(zhí)行 ? ? -wx ? 3
? ? ?? ?對其他用戶可讀 ? ? ? ? ?r-- ? 4
? ? 4、將該目錄 demo/ 拷貝到根目錄下。
一、程序編譯
我們編寫程序?qū)崿F(xiàn)輸出hello world!!,相信大家這里的程序都會寫。
//#include <stdio.h> //宏:包含導入c語言標準輸入輸出頭文件
int main() //程序入口
{
printf("hello world!!\n"); //在終端上打印 hello world!! 字符串
return 0;
}
gcc: 編譯器、編譯c語言的工具。
編譯: gcc hello.c 編譯得到一個可執(zhí)行文件 a.out
執(zhí)行: ./可執(zhí)行文件 ./a.out
gcc hello.c -o bin
-o:將可執(zhí)行文件重命名為bin,方便使用,防止文件覆蓋。
?我們在Linux系統(tǒng)中,運行g(shù)cc hello.c可以得到一個.out文件。如果程序有錯,就會提示哪里有錯。下面是GCC編譯器的介紹:?
GCC(GNU Compiler Collection)是一款免費的開源編譯器,支持多種編程語言,例如C、C++、Objective-C、Fortran、Ada等。它是許多操作系統(tǒng)和軟件的基石,包括GNU/Linux、Mac OS X、FreeBSD等。由于GCC的廣泛應(yīng)用和社區(qū)的龐大,它成為了業(yè)內(nèi)最流行和廣泛使用的編譯器之一。
GCC(GNU Compiler Collection)是一款免費的開源編譯器,支持多種編程語言,例如C、C++、Objective-C、Fortran、Ada等。它是許多操作系統(tǒng)和軟件的基石,包括GNU/Linux、Mac OS X、FreeBSD等。由于GCC的廣泛應(yīng)用和社區(qū)的龐大,它成為了業(yè)內(nèi)最流行和廣泛使用的編譯器之一。
?
?
練習二:
?? ?使用?? ?notpad++編寫C程序,實現(xiàn)打印自己的姓名+學校+專業(yè)。在Ubuntu共享目錄中,編譯運行。
?? ?拓展:打印99乘法表(循環(huán))。
我們這里的程序都比較簡單,我就直接展示代碼,這里主要是來練習如何用GCC編譯程序,熟悉這個過程。
#include <stdio.h>
int main()
{
int i, j;
for(i = 1; i<=9; i++)
{
for(j = 1; j<=i; j++)
{
printf("%dx%d=%d ", i, j, i*j);
}
printf("\n");
}
return 0;
}
如果你得到的結(jié)果和我一模一樣,就說明,你已經(jīng)掌握了這個方法,接下來,我們介紹文件。
二、文件IO
什么是文件?
文件就是存放數(shù)據(jù)的集合。
比如:.txt文件 .bmp文件 ? .jpg文件、、、、
Unix/Linux對數(shù)據(jù)文件(*.mp3、*.bmp),程序文件(*.c、*.h、*.o),設(shè)備文件(LCD、觸摸屏、鼠標),網(wǎng)絡(luò)文件( socket ) 等的管理都抽象為文件,使用統(tǒng)一的方式方法管理。
在Linux系統(tǒng)中,一切皆是文件!!!
控制一個LCD屏幕設(shè)備----》控制LCD設(shè)備對應(yīng)的設(shè)備文件---》文件IO
三、文件IO常用API接口函數(shù)
打開文件----》對文件進行讀/寫操作-----》關(guān)閉(保存)文件
1、打開文件 open()
頭文件:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
函數(shù)原型:
int open(const char *pathname, int flags);
參數(shù)列表:
const char *pathname:需要打開的文件路徑的字符串 "./1.txt"
int flags: 打開文件的方式
O_RDONLY 以只讀方式打開文件
O_WRONLY 以只寫方式打開文件
O_RDWR 以可讀寫方式打開文件
返回值:
失?。?-1,錯誤碼errno被設(shè)置。
成功:返回一個新的文件描述符(文件的唯一標識符,遙控器)
我們就可以通過這個文件描述符操縱這個文件。
2、將數(shù)據(jù)內(nèi)容寫入文件 write()
頭文件:
#include <unistd.h>
函數(shù)原型:
ssize_t write(int fd, const void *buf, size_t count);
從buf寫入數(shù)據(jù)的內(nèi)存緩沖區(qū)中 取count個字節(jié)數(shù)據(jù) 寫入fd指代的文件中
參數(shù)列表:
int fd:需要寫入數(shù)據(jù)的目標文件的文件描述符,就是open函數(shù)的返回值。
const void *buf:臨時存放待寫入的數(shù)據(jù)的內(nèi)存緩沖區(qū)
size_t count:寫入的數(shù)據(jù)字節(jié)大小
返回值:
失?。?-1,錯誤碼errno被設(shè)置。
成功:返回實際寫入的字節(jié)個數(shù)。
3、關(guān)閉(保存)文件
頭文件:
#include <unistd.h>
函數(shù)原型:
int close(int fd);
參數(shù)列表:
int fd: 需要關(guān)閉的目標文件的文件描述符。
返回值:
成功:返回0;
失?。悍祷?1,錯誤碼errno被設(shè)置。
四、編程示例
#include <stdio.h>
#include <sys/types.h> //open()
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h> //write()
int main()
{
//1、打開文件 1.txt
int fd = open("./1.txt", O_RDWR);
if(fd == -1)
{
//printf("open file failed!");
perror("open file failed!"); //通過錯誤碼打印錯誤信息
return -1; //程序非正常結(jié)束
}
//2、向文件中寫入數(shù)據(jù)
char buf[50] = "好好學習,天天向上!";
int w_size = write(fd, buf, 50);
printf("返回實際寫入的字節(jié)個數(shù): %d\n", w_size);
//3、保存退出
close(fd);
return 0;
}
//1、打開文件 1.txt
:這是打開文件的部分。它嘗試打開當前目錄下的"1.txt"文件,如果文件不存在,則返回-1。//通過錯誤碼打印錯誤信息
:這是錯誤處理的代碼。如果在打開文件過程中發(fā)生錯誤,它會打印錯誤信息并返回-1。//2、向文件中寫入數(shù)據(jù)
:這是向文件寫入數(shù)據(jù)的部分。它創(chuàng)建一個字符數(shù)組buf,并寫入"好好學習,天天向上!"這句話。然后使用write()函數(shù)將buf的內(nèi)容寫入到文件中。//返回實際寫入的字節(jié)個數(shù): %d
:這是打印實際寫入文件字節(jié)數(shù)的部分。//3、保存退出
:這是關(guān)閉文件的部分。在寫入數(shù)據(jù)后,使用close()函數(shù)關(guān)閉文件。
我們這里實現(xiàn)了打開文件,寫入文件的,最后關(guān)閉文件,今天的程序難度不大,主要還是熟悉操作。文章來源:http://www.zghlxwxcb.cn/news/detail-756990.html
總結(jié)
今天,我們主要熟悉了用GCC來編譯程序和對文件的相關(guān)操作。下一篇,我們來介紹在led屏幕上顯示圖片。文章來源地址http://www.zghlxwxcb.cn/news/detail-756990.html
到了這里,關(guān)于合肥中科深谷嵌入式項目實戰(zhàn)——基于ARM語音識別的智能家居系統(tǒng)(二)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!