2016-05-08 6 views
0

私はLinux上のCで実行可能ファイルを単にコピーするプログラムを書いています。linuxでファイルをコピーするC

#include <stdio.h> 


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

FILE *src1; 
FILE *final; 

if ((src1 = fopen("/home/exophrenik/Desktop/src1","rb")) == NULL) 
{ 
    printf("Could not open src1\n"); 
    return -12; 
} 

if ((final = fopen("/home/exophrenik/Desktop/final","wb")) == NULL) 
{ 
    printf("Could not open final\n"); 
    return -32; 
} 

int c; 
while((c=fgetc(src1))!=EOF) 
{ 
    printf("%d\n",c); 
    fputc(c,final); 
} 

fclose(src1); 
fclose(final); 
return 0; 
} 

プログラムが正しくコンパイルされていて、正しく機能しているようです。唯一の問題は、コマンドラインから '最終的な'実行ファイルを実行しようとすると、Permission Deniedエラーが発生することです。私は上記のプログラムをsudoとして再コンパイルし、それをsudoとして実行しますが、違いがあります。 私の小さなLinuxの経験から、./コマンドでプログラムを実行しようとするとアクセス許可が拒否されることがよくありますが、geditを使用する代わりにそのようなtxtファイルを開こうとするような実行可能ファイルではないことがわかります。

私の唯一のことは、すでに動作している実行可能ファイルをコピーしているときに同じエラーが発生するのですか?何とか新しいファイルが破損するコピープロセス中に何か間違ったことをしていますか?

+0

結果をコンパイルして実行するために使用するコマンドを表示してください。あなたは何か間違っている可能性が高いです。 'umask'を実行した結果も表示してください。 – Jens

+0

おそらく、新しく作成されたファイルに対して実行可能なアクセス権を設定する必要があります(chmod()を参照)。別のコメント:ファイルを高速化するために、文字単位ではなくチャンク単位でファイルを読み取ることができます(たとえば、1キロバイトのチャンク)。 – BrunoLevy

+0

前のコメントを詳しく説明するために、Linuxではプログラムの実行可能フラグがパーミッションビットとして実装されています。そういうわけで、あなたは拒否されました:それはあなたが十分な特権を持っていないということを意味するのではありません( 'sudo'は助けになりません)が、実行可能パーミッションビットはファイルに設定されていません。 – rodrigo

答えて

1

問題が見つかりました。コメントの中にすでに述べられているように、権限の問題でした。

Iは、これらのラインは、SRC1実行可能ファイルのアクセス許可をコピーしても、それの実行製造最終的なファイルにその後適用される上記のコードに次の行

struct stat st; 

    stat("/home/exophrenik/Desktop/src1", &st); 
    chmod("/home/exophrenik/Desktop/final", st.st_mode); 

を加えました。以下のヘッダが必要です

#include <sys/stat.h> 
関連する問題