Cでread()とwrite()を呼び出す方法を知りたいです。 ディレクトリ内の既存のファイルの内容を読み込みしようとしています。バッファ(配列)ので、配列をステップ実行して、読み込まれたファイルのタイプを判断できます。私はこの問題に関するいくつかの異なる投稿を見てきて、私がどこに間違っているのか理解できなかった。私はファイルの種類を決定するためにステップする前に、ファイルの正しい内容を保持していることを確認するために、バッファの配列を一番下に印刷しようとしていますが、バッファには何も格納されていません。どんな助けでも大歓迎です。システムコールのC言語での読み込みと書き込み
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <sys/stat.h>
#include <sys/unistd.h>
#include <sys/time.h>
#include <sys/types.h>
#include <time.h>
int main(int argc, char *argv[])
{
char *currentDir = NULL;
DIR *myDir = NULL;
struct dirent *myFile = NULL;
struct stat myStat;
const void *buf [1024];
int count;
int currentFile;
if (strcmp(argv[1], "ls") == 0 && argc < 3)
{
currentDir = getenv("PWD");
myDir = opendir(currentDir);
while ((myFile = readdir(myDir)) != NULL)
{
if (myFile->d_name[0] != '.')
{
puts(myFile->d_name);
//printf("%s\n", myFile->d_name);
}
}
closedir(myDir);
}
if (strcmp(argv[1], "ls") == 0 && strcmp(argv[2], "-t") == 0)
{
currentDir = getenv("PWD");
myDir = opendir(currentDir);
while ((myFile = readdir(myDir)) != NULL)
{
if (myFile->d_name[0] != '.')
{
printf("%s\n", myFile->d_name);
stat (myFile->d_name, &myStat);
printf("Last Accessed:\t%s\n", ctime(&myStat.st_atime));
printf("Last Modified:\t%s\n", ctime(&myStat.st_mtime));
printf("Last Changed:\t%s\n", ctime(&myStat.st_ctime));
}
}
closedir(myDir);
}
if (strcmp(argv[1], "ls") == 0 && strcmp(argv[2], "-f") == 0)
{
currentDir = getenv("PWD");
myDir = opendir(currentDir);
while ((myFile = readdir(myDir)) != NULL)
{
//while (count = read(0, buf, 100) > 0)
//{
//}
//write (1, buf, 100);
//printf ("Buffer Holds:\n %s\n", buf);
if (myFile->d_name[0] != '.')
{
while (count = read(myFile->d_name, buf, 100) > 0)
write (1, buf, count);
printf ("Buffer Holds:\n %s\n", buf);
}
}
}
return 0;
}
「どこに間違っているのかわからない」まあ。あなたは何が間違っているかは言わなかった。 [ask]をお読みください。 – OldProgrammer
あなたは**このループが何をしていると思うかを正確に説明できますか? 'read()'と 'write()'の引数は(それぞれのもの)と思いますか? https://gist.github.com/84dac9dc427af987c0a6bee7a7b87477 – yLaguardia
私は、読み込みがmyFile-> d_nameで指定されたファイルからビットを正しく送信していないと考えています。これは、inturnが書き込みにバッファに何も送信しないようにしています。私は最後のファイルに到達した後、すべてのファイルが "リスト"されるまで、whileループ 'while((myFile = readdir(myDir)!= NULL)'がディレクトリを踏んでいることを証明しています。ディレクトリ内の他の項目だから、もし私が1つのファイルを読み込み、バッファに書き込んだり、そのファイルを分類したりすると、whileループが繰り返されて、何も残らなくなるまですべてのファイルを分類できるようになります。 –