目次
3. ファイル IO でよく使用される API インターフェイス関数
ARM音声認識に基づくスマートホームシステム
前回の記事では、Linux システムの特質について説明しました。今日は、Linux システムでプログラムをコンパイルします。2 つの小さな演習を通じて、Linux システムに慣れていきます。
演習 1
基本的なコマンドの使用法に慣れてください。
1. ユーザーのデスクトップ ディレクトリに新しいディレクトリ ファイル demo/ を作成します。
2. 新しい通常のファイル hello.c をディレクトリ demo/ に作成します。
3. ファイル hello.c を変更する権限は次のとおりです。
ユーザーは読み取り、書き込み、および実行が可能です。 rwx 7
同じグループのユーザーは、-wx の書き込みと実行が可能です。 3
他のユーザーによる読み取りが可能です。 r-- 4
4. ディレクトリ demo/ をルート ディレクトリにコピーします。
1. プログラムのコンパイル
hello world!! を出力するプログラムを書きますが、ここにいる人なら誰でも書けると思います。
//#include <stdio.h> //宏:包含导入c语言标准输入输出头文件
int main() //程序入口
{
printf("hello world!!\n"); //在终端上打印 hello world!! 字符串
return 0;
}
gcc: 编译器、编译c语言的工具。
编译: gcc hello.c 编译得到一个可执行文件 a.out
执行: ./可执行文件 ./a.out
gcc hello.c -o bin
-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 は広く使用されており、大規模なコミュニティがあるため、業界で最も人気があり、広く使用されているコンパイラーの 1 つとなっています。
GCC (GNU Compiler Collection) は、C、C++、Objective-C、Fortran、Ada などの複数のプログラミング言語をサポートする無料のオープンソース コンパイラーです。これは、GNU/Linux、Mac OS X、FreeBSD などを含む、多くのオペレーティング システムとソフトウェアの基礎です。 GCC は広く使用されており、大規模なコミュニティがあるため、業界で最も人気があり、広く使用されているコンパイラーの 1 つとなっています。
演習 2:
notpad++ を使用して、名前、学校、専攻を出力する C プログラムを作成します。 Ubuntu 共有ディレクトリでコンパイルして実行します。
拡張: 99 個の九九を出力します (ループ)。
ここにあるプログラムは比較的単純なので、コードを直接示しますが、ここでの主な目的は、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;
}
得られた結果が私と全く同じであれば、あなたはこの方法をマスターしたことになります。
2. ファイルIO
ファイルとは何ですか? ファイルはデータの集合です。 例: .txt ファイル、.bmp ファイル、.jpg ファイル、、、データ ファイル (*.mp3、*.bmp)、プログラム ファイル (*.c、 *.h 、 *.o)、デバイスファイル (LCD、タッチスクリーン、マウス)、ネットワークファイル (ソケット) などはすべてファイルに抽象化され、統一的に管理されます。
Linux システムでは、すべてがファイルです。
液晶画面デバイスの制御---》液晶画面デバイスに対応するデバイスファイルの制御---》ファイルIO
3. ファイル IO でよく使用される API インターフェイス関数
ファイルを開く-----》ファイルの読み取り/書き込み-----》ファイルを閉じる(保存)
1. ファイルを開く open()
头文件:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
函数原型:
int open(const char *pathname, int flags);
参数列表:
const char *pathname:需要打开的文件路径的字符串 "./1.txt"
int flags: 打开文件的方式
O_RDONLY 以只读方式打开文件
O_WRONLY 以只写方式打开文件
O_RDWR 以可读写方式打开文件
返回值:
失败: -1,错误码errno被设置。
成功:返回一个新的文件描述符(文件的唯一标识符,遥控器)
我们就可以通过这个文件描述符操纵这个文件。
2. データ内容をファイルに書き込みます write()
头文件:
#include <unistd.h>
函数原型:
ssize_t write(int fd, const void *buf, size_t count);
从buf写入数据的内存缓冲区中 取count个字节数据 写入fd指代的文件中
参数列表:
int fd:需要写入数据的目标文件的文件描述符,就是open函数的返回值。
const void *buf:临时存放待写入的数据的内存缓冲区
size_t count:写入的数据字节大小
返回值:
失败: -1,错误码errno被设置。
成功:返回实际写入的字节个数。
3. ファイルを閉じる(保存)
头文件:
#include <unistd.h>
函数原型:
int close(int fd);
参数列表:
int fd: 需要关闭的目标文件的文件描述符。
返回值:
成功:返回0;
失败:返回-1,错误码errno被设置。
4. プログラミング例
#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; //程序非正常结束
}
//2、向文件中写入数据
char buf[50] = "好好学习,天天向上!";
int w_size = write(fd, buf, 50);
printf("返回实际写入的字节个数: %d\n", w_size);
//3、保存退出
close(fd);
return 0;
}
//1、打开文件 1.txt
:ファイルを開く部分です。現在のディレクトリにある「1.txt」ファイルを開こうとしますが、ファイルが存在しない場合は -1 を返します。//通过错误码打印错误信息
: これはエラー処理コードです。ファイルを開くときにエラーが発生した場合は、エラー メッセージが出力され、-1 が返されます。//2、向文件中写入数据
:ファイルにデータを書き込む部分です。文字配列 buf を作成し、「毎日一生懸命勉強して進歩しましょう!」と書き込みます。 「この文。次に、write() 関数を使用して、buf の内容をファイルに書き込みます。//返回实际写入的字节个数: %d
: これは、ファイルに書き込まれた実際のバイト数を出力する部分です。//3、保存退出
:ファイルを閉じる部分です。データを書き込んだ後、close() 関数を使用してファイルを閉じます。
ここでは、ファイルを開いて、ファイルに書き込み、最後にファイルを閉じています。今日のプログラムは難しいものではありません。重要なのは、操作に慣れることです。
要約する
現在、私たちは主に GCC を使用してプログラムをコンパイルしたり、関連するファイル操作を行ったりすることに慣れています。次回はLEDスクリーンに写真を表示する方法を紹介します。