2012-03-06 8 views
1

ディレクトリをファイルに変更したい、いくつかの研究をしました。 Linuxでは、inode構造体はファイルとディレクトリに関するメタデータを格納します。ファイル保護モードをディレクトリからファイルに変更したいのですが、Cプログラムのinode構造体を使用してLinuxでファイルをディレクトリに変更する

Print some general file info 

#include <time.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <sys/stat.h> 
#include <sys/types.h> 

int main(int argc, char *argv[]) { 
struct stat file_stats; 

if(argc != 2) 
    fprintf(stderr, "Usage: fstat FILE...\n"), exit(EXIT_FAILURE); 

if((stat(argv[1], &file_stats)) == -1) { 
    perror("fstat"); 
    return 1; 
} 

printf("filename: %s\n", argv[1]); 
printf(" device: %lld\n",      file_stats.st_dev); 
printf(" inode: %ld\n",       file_stats.st_ino); 
printf(" protection: %o\n",      file_stats.st_mode); 
printf(" number of hard links: %d\n",   file_stats.st_nlink); 
printf(" user ID of owner: %d\n",    file_stats.st_uid); 
printf(" group ID of owner: %d\n",    file_stats.st_gid); 
printf(" device type (if inode device): %lld\n",file_stats.st_rdev); 
printf(" total size, in bytes: %ld\n",   file_stats.st_size); 
printf(" blocksize for filesystem I/O: %ld\n", file_stats.st_blksize); 
printf(" number of blocks allocated: %ld\n", file_stats.st_blocks); 
printf(" time of last access: %ld : %s",  file_stats.st_atime, ctime(&file_stats.st_atime)); 
printf(" time of last modification: %ld : %s", file_stats.st_mtime, ctime(&file_stats.st_mtime)); 
printf(" time of last change: %ld : %s",  file_stats.st_ctime, ctime(&file_stats.st_ctime)); 

return 0; 
} 

ディレクトリをファイルに変更する方法はありますか?どのようにCプログラムによってinodeの構造を変更するには?

+3

ファイルを削除してからディレクトリを作成する特別な理由はありますか? – Corbin

+0

ya。私は、ファイルとして扱うことによって、ディレクトリ上でいくつかの操作をしたい。 – Nimit

+0

ディレクトリはすでにファイルです。あなたは本当に何をしたいですか? – Duck

答えて

1

ファイルを開くには、オープンシステムコールを使用する必要があります。しかし、現在オープンシステムコールでは、誰も書き込みのためにディレクトリを開くことができません。書き込みのためにディレクトリでopenを呼び出すと、エラー(-1)が返され、errnoにEISDIRが設定されます。

あなたはそれをやりたければ、Linuxファイルシステムドライバのオープンシステムコールを再実装する必要があります。

+0

ディレクトリをファイルに変換する方法はありますか? – Nimit

+2

私はそのようなオプションがあるとは思わない。コンテンツを新しいファイルにコピーするだけで、既存のディレクトリを新しく作成したファイルで置き換えることができます。 – theB

関連する問題