![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
main関数に2つの引数をとり、第1引数で指定したファイルの内容を第2引数で指定したファイルにコピーするプログラムを以下のように作りました。
#include<stdio.h>
#include<fcntl.h>
int main(int argc, char* argv[]){
int fd1, fd2, rs, ws;
char buffer[10000];
if(argc!=3){
write(2, "使用法:実行ファイル コピー元ファイル コピー先ファイル\n", 54);
exit(1);
}
fd1=open(argv[1], O_RDONLY);
if(fd1<0){
fprintf(stderr, "can't open file '%s'.\n", argv[1]);
exit(1);
}
fd2=open(argv[2], O_WRONLY|O_CREAT|O_TRUNC);
if(fd2<0){
fprintf(stderr, "can't open file '%s'.\n", argv[2]);
exit(1);
}
while((rs=read(fd1, buffer, 10000))>0){
if((ws=write(fd2, buffer, rs))!=rs){
write(2, "an error occurred while copying.\n");
exit(1);
}
}
close(fd1);
close(fd2);
}
コンパイル、実行ともに正常終了したのですが、
コピー先のテキストファイルを開こうとすると、
「アクセスは拒否されました。」というダイアログが表示されて
開くことができません。
なぜなのでしょうか。
よろしくお願いします。
ちなみにOSはWindows Vistaで、
プログラムはcygwin上で実行しました。
No.2ベストアンサー
- 回答日時:
>コンパイル、実行ともに正常終了したのですが、
確かに「正常」終了しました。
正常に「」を付けたのは、
・オリジナルファイル終端の 0x1A が、新規のものには無い(1バイト小さい)。
・新規のファイルは、属性が「書き込み禁止」でできあがった。
からです(前者は些末のことと思います)。
>コピー先のテキストファイルを開こうとすると、
>「アクセスは拒否されました。」というダイアログが表示されて
>開くことができません。
windows2000 では、アクセスできました。
fd2=open(argv[2], O_WRONLY|O_CREAT|O_TRUNC); このうち、O_TRUNC を指定したことで、
open() に「第3引数」が必要となるようです。
http://www.linux.or.jp/JM/html/LDP_man-pages/man …
↑ここの O_CREAT の説明に、「flags に O_CREAT が指定されている場合、 mode を指定しなければならない。」とあります。
ここら辺りが影響しているのではないでしょうか。
回答ありがとうございます。
ls -lで確認してみたら、
yama5140さんの言うとおり、
作られたファイルが読み込み・書き込み禁止になっていました。
解決できてよかったです。
No.3
- 回答日時:
No.2 です。
訂正
誤:fd2=open(argv[2], O_WRONLY|O_CREAT|O_TRUNC); このうち、O_TRUNC を指定したことで、
正:fd2=open(argv[2], O_WRONLY|O_CREAT|O_TRUNC); このうち、O_CREAT を指定したことで、
申し訳ない・・。
No.1
- 回答日時:
>「アクセスは拒否されました。
」というダイアログが表示されて>開くことができません。
その書き込み先のファイルは作成可能なのでしょうか?
実行したユーザーでは書き込みできない場所だった…とか。
http://www.linux.or.jp/JM/html/LDP_man-pages/man …
errnoには何が設定されていましたか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# C言語のファイル入力が分かりません 2 2022/05/22 06:35
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/02/05 09:55
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/06 13:01
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Visual Basic(VBA) Excelのマクロについて教えてください。 1 2023/03/12 12:16
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 12:30
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで複数のコメントのサ...
-
Vba初心者です。下記のコード助...
-
[エクセル]コピーするとオブジ...
-
バッチファイルのコピーで
-
frxファイルの役目
-
エクセル2010、図が大きすぎま...
-
FTPとファイルコピーの違いにつ...
-
エクセルVBAで開いているファイ...
-
ExeclVBAユーザーフォームから...
-
開いている別のファイルにExcel...
-
ファイルをコピーできない
-
ファイルサーバ上のファイルが...
-
4時間
-
バッチファイル 別ファイルにリ...
-
同じファイル名 上書きしないフ...
-
ワードへのハイパーリンク貼り...
-
アクセス クエリを別のファイ...
-
ExcelシートをコピーするとA4用...
-
Excelのマクロについて教えてく...
-
ゴミ箱に移動するような削除を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで複数のコメントのサ...
-
エクセルのハイパーリンクがコ...
-
frxファイルの役目
-
バッチファイル XCOPYで上書き...
-
Vba初心者です。下記のコード助...
-
Excelのマクロについて教えてく...
-
エクセル2010、図が大きすぎま...
-
バッチファイル 別ファイルにリ...
-
[エクセル]コピーするとオブジ...
-
エクセルVBAで開いているファイ...
-
パワポでスライドをコピーでき...
-
ファイルサーバ上のファイルが...
-
xcopyでのバッチコピー方法でコ...
-
Excelのマクロについて教えてく...
-
FTPとファイルコピーの違いにつ...
-
Excelのマクロについて教えてく...
-
バッチファイルのコピーで
-
bat 同名ファイルコピー時にリ...
-
アクセス クエリを別のファイ...
-
同じファイル名 上書きしないフ...
おすすめ情報