如何使用低级别write()函数将字符串写入文件?
问题描述:
例如,我可以输入文件的内容写入到输出文件,:如何使用低级别write()函数将字符串写入文件?
char buffer[1024]; // character buffer
char userInput[1024]; // for user input
char *p;
char *q;
int n;
int input_file1; // file descriptor for file 1
int input_file2; // file descriptor for file 2
int output_file; // file descriptor for output_file
while((n = read(input_file1, buffer, sizeof(buffer))) > 0)
{
progress("entered first while loop");
if((write(output_file, buffer, n)) < 0)
{
progress("couldn't write to output within while loop 1");
perror(argv[3]);
close(input_file1);
close(input_file2);
close(output_file);
exit(1);
}
}
我也有一些用户输入:
printf("\nEnter text then hit enter: ");
q = fgets(userInput, sizeof(userInput), stdin);
我要追加用户输入使用write()来写入同一个输出文件;
我该怎么做?
-----更新----可与
if(strcmp(argv[1], "-") == 0) // use standard-in for input file 1
{
progress("file 1 detected as \"-\": using std input");
p = fgets(userInput, sizeof(userInput), stdin);
if (write(output_file, userInput, sizeof(p)) < 0) {
progress("write from stdin to output file failed");
perror(argv[4]);
exit(1);
}
progress("wrote from stdin to output file");
}
答
只是你做同样的事情。但你不必在第一时间关闭文件。
和获取用户(标准输入)输入,然后将其与write()
功能
q = fgets(userInput, sizeof(userInput), stdin);
write(output_file, userInput, strlen(userInput));
close(output_file);
答
写入该文件假设你已经打开了output_file
写(也可能写入它):
#define MAX 120
char buffer[MAX];
int len = sprintf(buffer, "Whatever you want to print in %d characters.\n", MAX);
if (write(output_file, buffer, len) < 0) {
perror("Cannot write to file.");
exit(1);
}
答
写()函数的原型:
ssize_t write(int fildes, const void *buf, size_t nbyte);
对于能够查找的常规文件或其他文件,数据的实际写入应从与fildes相关的文件偏移所指示的文件中的位置开始。在成功从write()返回之前,文件偏移量应该增加实际写入的字节数。在常规文件中,如果此增量文件偏移量大于文件长度,则文件长度应设置为此文件偏移量。
在无法找到的文件上,写入始终应从当前位置开始。与此类设备关联的文件偏移量的值未定义。
如果设置了文件状态标志的O_APPEND标志,则应在每次写入之前将文件偏移量设置为文件末尾,并且在更改文件偏移量和写入操作之间不得进行中间文件修改操作。
答
只是open()
与模式O_APPEND
output_file = open("output", O_WRONLY | O_APPEND | O_CREAT);
这样的输出中的文件,写入将追加到该文件。
write(output_file, userInput, strlen(userInput));
test.c:96:错误:调用对象'userInput'不是函数 – Chips
@chips。这是一个错字。我修复了我的代码 – MOHAMED
test.c:在函数'main'中: test.c:96:警告:不兼容隐式声明内置函数'strlen' – Chips