[LINUX]基本IO(リダイレクト)

基本IO

システムファイルIO

ファイルを操作するときのfopen、fwrite、およびその他のインターフェイスに加えて、システムインターフェイスを使用してファイルにアクセスすることもできます。

インターフェイスの紹介

開いた

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
pathname: 要打开或创建的目标文件
flags: 打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行“或”运算,构成flags。
参数:
O_RDONLY: 只读打开
O_WRONLY: 只写打开
O_RDWR : 读,写打开
这三个常量,必须指定一个且只能指定一个
O_CREAT : 若文件不存在,则创建它。需要使用mode选项,来指明新文件的访问权限
O_APPEND: 追加写
返回值:
成功:新打开的文件描述符
失败:-1

ここでは、パス名を含め、フラグが導入され、書き込み、読み取りなどがCライブラリのものと同様です。

ファイル記述子

定義するとき

int fd=open(.........)

この形式
ここに画像の説明を挿入
で、ファイル記述子が0から始まる小さな整数であることがわかりました。ファイルを開くとき、オペレーティングシステムは、ターゲットファイルを記述するために、メモリ内に対応するデータ構造を作成する必要があります。したがって、ファイル構造があります。開いているファイルオブジェクトを表します。プロセスはopenシステムコールを実行するため、プロセスをファイルに関連付ける必要があります。各プロセスには、テーブルfiles_structを指すポインタファイルがあります。テーブルの最も重要な部分は、ポインタの配列を含むことです。各要素は、開いているファイルへのポインタです。したがって、本質的に、ファイル記述子は配列の添え字です。したがって、ファイル記述子を保持している限り、対応するファイルを見つけることができます*

したがって、C言語で使用されるfpの最下層は構造体です。構造体には、fdを記述子として記述するデータが含まれている必要があります。

0&1&2

デフォルトでは、Linuxプロセスには、標準入力0、標準出力1、および標準エラー2
3つのデフォルトのオープンファイル記述子があります。0、1、2に対応する物理デバイスは、通常、キーボード、ディスプレイ、ディスプレイです。

リダイレクト

fd配布ルール

コードが標準出力になる前にclose(1)// 1を閉じてから、
データをfdに書き込むと、表示は表示されませんが、ファイルに書き込まれます。それ以降、配布ルールを導入することができます。
1.システムは、012を標準入力、標準出力、および標準エラーに割り当てます。(最下層はハードウェアと相互作用する必要があるため)
2。事前にそれらの1つを閉じると、fdが割り当てに小さな添え字を選択することがわかります。
3.これはリダイレクトも導入します。
ここに画像の説明を挿入
この図はリダイレクトの本質です。

コードに目を通す

int main()
{
    
    
close(1);
int fd = open("myfile", O_WRONLY|O_CREAT, 00644);
if(fd < 0){
    
    
perror("open");
return 1;
}
printf("fd: %d\n", fd);
fflush(stdout);
close(fd);
exit(0);
}

最初に閉じる(1)、次に1が最小の添え字です。ファイルを開くと、ファイル記述子fdで記述されます。このとき、fdの値は1であり、ディスプレイへの入力はファイルにリダイレクトされます。

dup2関数

ヘッダーファイルとその定義:#include <unistd.h> int dup2(int oldfd、int newfd);

dup2は、パラメーターnewfdを使用して、新しいファイル記述子の値を指定できます。プログラムがパラメータnewfdを使用している場合、システムはnewfdが指すファイルを閉じます。newfdがoldfdと等しい場合、newfdが指すファイルを閉じずにnewfdに戻ります。dup2によってコピーされたファイル記述子は、元のファイル記述とさまざまなファイル状態を共有します。すべてのロック、読み取りと書き込みの位置、さまざまなアクセス許可またはフラグなどを共有します。
戻り値:
dup2呼び出しが成功すると、新しいファイル記述子が返され、失敗すると-1が返されます。

おすすめ

転載: blog.csdn.net/weixin_43762735/article/details/115309552