cp操作を実現するためのLinuxプログラミング(研究ノート1)
序文
この一連の記事は、作成者がLinuxを学習するためのプログラミング例です。ファイル記述子と関連するAPIを以前に学習しました。欠陥がある場合は、コメントして修正してください。
ヒント:以下はこの記事の内容です。以下のケースは参照用です。
1.実現のアイデア
最初にcp
このコマンドを紹介します。cp
英語の完全なスペルcopy
はコピーに変換されます。使用法は非常に簡単です。一般的に使用されるパラメータについてはここで説明します。1つの-Rコピーディレクトリのみをここで説明します。使用法:CP {源文件} {目标目录}
- オープンソースファイル
src
(マーク付き) src
内容読むファイルをbuf
に- 開いて新しいものを作成する
des
buf
コンテンツはに書かれていますdes
close
2つのファイル
#二、手順## 1を使用します。正式なパラメータ参照の説明
最初は、結果argc = 3
、main
合計2つのパラメーターの主な機能がなぜ理解できませんでしたint argc, char **argv
。プログラムの場合、すべてがプログラム名で始まります。元のcp
命令の実装では、cp、src.c、des.c
3つはそれぞれパラメータに対応し0、1、2
、合計で3つのパラメータがあります。の主な機能main
に属するこれらの3つのパラメータint argc
。2番目のパラメーターchar**argv
は2次ポインターであり、そのすべての要素は文字配列です。文字の2つの要素を含む配列にargv[0]
対応しcp
、argv[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;
}
コールdemo3
、demo3.c
我々がします私達の使用cp
にコピーdemo5.c
:
使用cat
ビューにコマンドをdemo5.c
:
Useコマンドはcat
、次の2つのファイルのコードが同じであることがわかります、我々は成功し、当社独自のコードを使用して、システムに付属の説明書を実装していることを示しますcp
3.記事の更新記録
- 2021.3.17最初に書かれた
malloc
スペースを空けて、lseek
ファイルサイズを表示するために使用します(時間がある場合は追加の時間)