0

open readここで、システムコールとシステムコールを使用して、あるファイルの内容を別のファイル (unix) にコピーしようとしていwriteますが、何らかの理由でコードが無限に実行されています...そしてエラーが発生しないので、助けていただければ! !

#include<unistd.h>
#include<stdio.h>
#include<sys/types.h>
#include<fcntl.h>
#include<stdlib.h>
#include<string.h>
int main(int args,char *ar[])
{
char *source=ar[1];
char *dest="def.txt";
char *buf=(char *)malloc(sizeof(char)*120);
int fd1,fd2;
fd1=open(source,O_CREAT,0744);
fd2=open(dest,O_CREAT,0744);
while(read(fd1,buf,120)!=-1)
{
printf("%s",buf);
//printf("Processing\n");
write(fd2,buf,120);
}
printf("Process Done");
close(fd1);
close(fd2);
}

事前にサンクス...

4

1 に答える 1

0

コードにはかなりの問題があります。

  • 最初の最も明白な点は、エラー ( mallocopenclose) をチェックしないことです。ご不明な点がある場合: はい、確認する必要がありますclose
  • openファイルアクセスモードを指定していないため、呼び出しは正しくありません。引用man 2 openThe argument flags must include one of the following access modes: O_RDONLY, O_WRONLY, or O_RDWR.ここで未定義の動作を呼び出しています。
  • の戻り値の扱いもread間違っています。エラーをチェックするだけですが、エラーが発生しなければ、プログラムは無期限にループします。ファイルの終わりはエラーとは見なされないことに注意してください。代わりreadに、読み取ったバイト数を返します (これはチェックしません)。ファイルの終わりの戻り値は 0 です。
  • メイン関数は値を返しません。gccまたはclangwithを実行し-Wall -Wextraて、このような問題を確認してください。
  • ちなみに、戻り値のキャストはmalloc有害と見なされます。
于 2013-07-31T18:48:13.293 に答える