cp操作を実現するためのLinuxプログラミング(研究ノート1)

cp操作を実現するためのLinuxプログラミング(研究ノート1)

序文

この一連の記事は、作成者がLinuxを学習するためのプログラミング例です。ファイル記述子と関連するAPIを以前に学習しました。欠陥がある場合は、コメントして修正してください。


ヒント:以下はこの記事の内容です。以下のケースは参照用です。

1.実現のアイデア

最初にcpこのコマンドを紹介します。cp英語の完全なスペルcopyはコピーに変換されます。使用法は非常に簡単です。一般的に使用されるパラメータについてはここで説明します。1つの-Rコピーディレクトリのみをここで説明します。使用法:CP {源文件} {目标目录}

  1. オープンソースファイルsrc(マーク付き)
  2. src内容読むファイルをbuf
  3. 開いて新しいものを作成するdes
  4. bufコンテンツはに書かれていますdes
  5. close2つのファイル

#二、手順## 1を使用します。正式なパラメータ参照の説明

最初は、結果argc = 3main合計2つのパラメーターの主な機能がなぜ理解できませんでしたint argc, char **argvプログラムの場合、すべてがプログラム名で始まります。元のcp命令の実装では、cp、src.c、des.c3つはそれぞれパラメータに対応し0、1、2、合計で3つのパラメータがありますの主な機能main属するこれらの3つのパラメータint argc2番目のパラメーターchar**argvは2次ポインターであり、そのすべての要素は文字配列です。文字の2つの要素を含む配列にargv[0]対応しcpargv[1]対応するsrc配列要素には3つの文字argv[2]が含まれますが、対応するdes配列要素には3つの文字が含まれます。

コードは次のとおりです(例):

#include<stdio.h>
int main(int argc,char **argv){
    
    
	printf("param number is %d\n",argc);
	printf("NO.1 param is %s\n",argv[0]);
	printf("NO.2 param is %s\n",argv[1]);
	printf("NO.3 param is %s\n",argv[2]);
	return 0;
}

実行結果は以下のとおりです。
ここに画像の説明を挿入します

上記の結果に基づいて、対応するシステムコマンドcpを実現できます。

2.cpを達成するためのプログラミング

コンパイルされたファイルdemo3.cは、以下demo3
を含む実行可能ファイル生成しますwrite,read,lseek,malloc等API的使用

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>

int main(int argc,char **argv)
{
    
    
        int fdSrc;
        int fdDes;
        int n_write;
        int n_read;
        char *readBuf ;
        int n_file;
        if(argc != 3)
        {
    
    
                printf("param error!\n");
                exit(-1);
        }
        fdSrc = open(argv[1],O_RDWR);
        //int open(const char *pathname, int flags, mode_t mode);
        //ssize_t write(int fd, const void *buf, size_t count);
        n_file = lseek(fdSrc,0,SEEK_END);
        lseek(fdSrc,0,SEEK_SET);
        readBuf = (char *)malloc(sizeof(char)*n_file + 8);
        n_read = read(fdSrc,readBuf,n_file);
        //ssize_t read(int fd, void *buf, size_t count);
//      close(fd);
//      fd = open("./file1",O_RDWR);
        fdDes = open(argv[2],O_RDWR|O_CREAT,0600);
        n_write = write(fdDes, readBuf,strlen(readBuf));
        printf("I have read %d bytes \n",n_read);
        close(fdSrc);
        close(fdDes);
        return 0;
}

コールdemo3demo3.c我々がします私達の使用cpにコピーdemo5.c
ここに画像の説明を挿入します
使用catビューにコマンドをdemo5.c

Useコマンドはcat、次の2つのファイルのコードが同じであることがわかります、我々は成功し、当社独自のコードを使用して、システムに付属の説明書を実装していることを示しますcp


3.記事の更新記録

  • 2021.3.17最初に書かれた

mallocスペースを空けて、lseekファイルサイズ表示するために使用します(時間がある場合は追加の時間)

おすすめ

転載: blog.csdn.net/weixin_45681786/article/details/114951159