Мне интересно, как использовать системные вызовы read() и write() в C. Я пытаюсь прочитать содержимое предварительно существующего файла в каталоге, в buffer (array), поэтому я могу пройти через массив и определить, какой тип файла был прочитан. Я просмотрел несколько разных постов по этому вопросу и не смог понять, где я ошибаюсь. Я пытаюсь распечатать свой буферный массив внизу, чтобы убедиться, что он содержит правильное содержимое файла перед тем, как сделать шаг, чтобы определить тип файла, но буфер не содержит ничего. Любая помощь будет принята с благодарностью.системные вызовы читать и писать в 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, что приводит к тому, что запись не передает ничего в буфер. Я верю, что while while while ((myFile = readdir (myDir))! = NULL) 'переходит в каталог до тех пор, пока все файлы не будут« перечислены »после достижения последнего файла, readdir возвращает 0, чтобы показать, что нет другие элементы в каталоге. Поэтому я думаю, что если я могу прочитать один файл, записать его в буфер, классифицировать указанный файл, тогда цикл while снова повторится, что позволит мне классифицировать все файлы до тех пор, пока не останется. –