Я пытаюсь реализовать команду displaycontent, которая принимает текстовое имя файла в качестве аргумента и отображает его содержимое. Я должен использовать open()
, read()
, write()
и close()
системные вызовы в Linux для этого. Он должен действовать как команда UNIX cat
для отображения содержимого файла.Использование системных вызовов (открытие, чтение, запись) для отображения содержимого файла
Вот то, что я до сих пор:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int fd;
char content[fd];
errno = 0;
fd = open(argv[1], O_RDONLY);
if(fd < 0)
{
printf("File could not be opened.\n");
perror("open");
return 1;
}
else
{
read(fd, content, sizeof(content)-1);
write(1, content, sizeof(content)-1);
}
return 0;
}
У меня есть файл с именем hello2.txt и в нем есть текст: hellooooooooooooooo
Когда я ./displaycontent hello2.txt
, я получаю:
[email protected]:~/Desktop/Csc332/csc332lab$ ./displaycontent hello2.txt
hellooooooooooooooo
����>k���[`�s�b��[email protected]:~/Desktop/Csc332/csc332lab$
Есть странные символы и вещи, следующие за содержимым файла. Я не уверен, что не так, любая помощь будет оценена. Спасибо.
'char content [fd];' Что? – EOF
@devbrs, похоже, вы забыли использовать 'close()'. – donjuedo
@donjuedo: файловые дескрипторы автоматически закрываются при завершении программы. – EOF