如何从命令行获取输出并使用 write() 将其输入到文件中?

How can I take output from the command line and input it into a file using write()?

我正在尝试使用 <unistd.h> 中的 write() 函数将命令行中的文本流式传输到文件中。我已经尝试了多种方法:

while(write(STDOUT_FILENO, argv[optind], strlen(STDIN_FILENO)) != 0)
{
    write(STDOUT_FILENO, "\n", sizeof("\n"));
}

但在不允许我输入任何内容的情况下继续出现分段错误或无限循环。我需要在不使用 read() 的情况下执行此操作,唯一允许的权限是为用户写入。我正在尝试使用 Ctrl + D 来表示输入结束。

运行 的一个例子是:

./a.out file.h

This line will append to the end of the file

<ctrl + d>

然后,当我打开文件时,它的末尾应该有 This line will append to the end of the file

您需要 read()STDIN_FILENO 到本地缓冲区,然后 write() 该缓冲区到 STDOUT_FILENO。但是您明确表示“我需要在不使用 read() 的情况下执行此操作”,这意味着您在这方面运气不佳。如果不阅读它,您将无法从 STDIN 获得输入。如果不能使用read(),是否可以使用其他阅读功能,如fread()gets()getline()等?

传入 file.h 一个输入参数有什么意义?当你执行命令/a.out file.h时,file.h内容根本不会发送到你的程序。在您的 main() 函数中,argv[1] 中提供了字符串值 "file.h"。您必须自己使用该字符串打开文件,例如使用 fopen(),然后根据需要 read/write 该文件。

如果您希望 file.h 内容 通过 STDIN 发送到您的程序,您需要执行 /a.out < file.h .注意 < 重定向运算符。

但是,听起来您的目标是打开 file.h 然后向其附加 STDIN 输入,在这种情况下您需要更多类似这样的内容:

FILE *f = fopen(argv[1], "w+");
if (!f) ...

char buffer[1024];
int nRead;

fwrite("\n", 1, 1, f);
while ((nRead = read(STDIN_FILENO, buffer, sizeof(buffer))) > 0)
{
    fwrite(buffer, 1, nRead, f);
}

fclose(f);