0

Unix 環境で使用できるプログラムをコーディングしようとしています。しかし、このようなことをするのはこれが初めてで、いくつかの点で混乱しています。私のコードは次のとおりです。

#include <unistd.h>
#include <stdio.h>

#define BUFFSIZE 4096

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

int n;
char buf[BUFFSIZE];

if (argc != 2){
    err_sys("usage a.out <pathname>");  
}

if (access(argv[1], R_OK) == -1){
    err_ret("access error for %s", argv[1]);
}

if (access(argv[2], R_OK) == 0){
    printf("Would you like to overwrite (Y or N)? \n");
    if(){
        exit(0);
    }
}

while ((n = read(STDIN_FILENO, buf, BUFFSIZE) > 0)){
    if (write(STDOUT_FILENO, buf, n) != n){
        err_sys("write error"); 
    }
}

if (n < 0){
    err_sys("read error");
}

close(STDOUT_FILENO);
close(STDIN_FILENO);

exit(0);

}

基本的に、open、read、write、close、および access を使用するプログラムを作成する必要があります。ただし、2 番目の引数 (ファイル名) が既に配置されている場合に、ユーザーに上書きするかどうかを確認する必要がある部分を実装する方法について、私は完全に混乱しています。

別名、これらのコード行:

if (access(argv[2], R_OK) == 0){
   printf("Would you like to overwrite (Y or N)? \n");
       if(){
           exit(0);
}

ユーザーからの応答を取得する方法と、その状態がどうなるかは正確にはわかりません。

また、他のコードが間違っている場合は、お気軽にお知らせください。改善方法を教えてください。

ありがとうございました!

追加したばかり:

if (open(argv[1], O_RDONLY) < 0){
    err_ret("open error for %s", argv[1]);
}
4

3 に答える 3

0

1つの文字だけを読み取るには、getchar()(stdio.h)を呼び出すことができます(scanf()もあります)。

サンプル:
c = getchar();
if(c == 'Y' || c == 'y'){ ... }
else if(c == 'N' || c == 'n'){ ... }
else { printf("Wrong option!") }

于 2012-09-10T02:48:04.800 に答える
0

fgets(3)またはreadline(3)を使用します。これらは、さまざまなシナリオで使用できるほど汎用的です。scanf(3)には問題があるため、使用を避けてください。詳細はこちら

ちなみに、「intn」の代わりに「size_tn」を使用してください。一般に、実装で定義された値であり、ヘッダーですぐに使用できるBUFSIZを使用できます。また、なぜ出口でstdinとstdoutを閉じるのですか?プログラムでそれを行う特別な理由はありません。

于 2012-09-10T20:00:46.370 に答える