如何从命令行获取输出并使用 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);
我正在尝试使用 <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);