1

私は c の初心者で、他の言語の経験はほとんどありません :/ 大学での割り当てについては、この小さな部分に少しこだわっています。基本的に、4 つのオプション引数を持つ「ls」関数を作成する必要があります。次に例を示します。

list [-l] [-f] [pathname] [localfile] 

さて、最初の 2 つは簡単です。さらに困難なことに、「localfile」は必ずしも存在するとは限らず、「パス名」(指定されている場合) は、ソケットを介して接続しているサーバー上に配置されます (そのため、ファイルであるかどうかを確認して確認します)。パス名はアウトです)。私は、文字列の最後の 4 文字で「.txt」または類似のものを確認することを考えていました。私は実際には完全に困惑しており、解決策が見つからない場合は、明日この問題をコースコンベアに提示します.

これは私が実際にやらなければならないことのほんの一部ですが、正しい方向へのプッシュは高く評価されます.

4

1 に答える 1

0

コマンドライン引数を取得するには、argc と argv を処理する必要があります。引数を取得し、それらが正しいことを確認し、何が求められているかを判断することが最初に取り組むことです。

int main(int argc, char  *argv[])

Linux/Unix を使用していると仮定すると、ディレクトリ関数 opendir()/readdir()/closedir() - dirent.hを使用する必要があります。-l 要件を満たすには、stat()関数が必要です。access()はファイルが存在するかどうかを判断し、stat()はそのファイルが通常のファイルかディレクトリかを教えてくれます。

4 つのオプション引数を保持する構造体を作成し、argc と argv をパラメーターとして受け取る「process_arguments」という関数からそれを返します。

struct args {
  bool valid;
  bool l_option;
  bool f_option
  char directory[200]; 
  char filename[200];
}

ソケット接続の要件により、サーバー上で常に実行される「サーバー プログラム」と、ローカル プログラムからの要求を処理するために分岐する「クライアント プログラム」を作成する必要があります。ソケット プログラムの例を探してみてください。

パス文字列またはファイル名があるかどうかを確認するもう 1 つの方法は、パス区切り文字 (サーバーが Unix/Linux の場合は「/」) を探すことです。このスキームでは、ファイル名にパス区切り文字を含めないでください。そのため、存在すると、それがパスであることがわかります。

于 2012-09-06T13:44:23.847 に答える