Я реализую свою собственную версию команды ("cat") в Unix для практики. После этого я заинтересовался реализацией некоторых флагов, таких как (-n) и (-b).
Мой вопрос: Я ищу способ найти пустые и новые строки при чтении из моего файла. Я не могу вспомнить, какую библиотеку или функцию я должен использовать.
Вот исходный код, над которым я работаю:
#include <fcntl.h>
#include <unistd.h>
static int cat_fd(int fd)
{
char buf[4096];
ssize_t nread;
while ((nread = read(fd, buf, sizeof buf)) > 0)
{
ssize_t ntotalwritten = 0;
while (ntotalwritten < nread)
{
ssize_t nwritten = write(STDOUT_FILENO, buf + ntotalwritten, nread - ntotalwritten);
if (nwritten < 1)
{
return -1;
}
ntotalwritten += nwritten;
}
}
return (nread == 0) ? 0 : -1;
}
static int cat(const char *fname)
{
int fd, success;
if ((fd = open(fname, O_RDONLY)) == -1)
{
return -1;
}
success = cat_fd(fd);
if (close(fd) != 0)
{
return -1;
}
return success;
}
int main(int argc, char **argv)
{
int i;
if (argc == 1)
{
if (cat_fd(STDIN_FILENO) != 0)
goto error;
}
else
{
for (i = 1; i < argc; i++)
{
if (cat(argv[i]) != 0)
{
goto error;
}
}
}
return 0;
error:
write(STDOUT_FILENO, "error\n", 6);
return 1;
}
Любые идеи или предложения, касающиеся моего вопроса, с благодарностью.
Я был бы еще более признателен, если бы вы могли напечатать для меня полный прототип функции, который я буду использовать, поскольку я не опытный программист.
Заранее спасибо за вашу помощь.
P.S: Я реализую флаги (-n) и (-b). Таким образом, я с нетерпением жду, чтобы написать номер строки в начале каждой строки в файле, который я читаю.