gpt4 book ai didi

c - 获取 write() 系统调用以写入文件

转载 作者:太空宇宙 更新时间:2023-11-04 06:26:05 25 4
gpt4 key购买 nike

我无法让 write() 系统调用写入文件。到目前为止,我设法只将乱码打印到一个据说是二进制文件的文件中。我知道我们必须以某种方式预格式化 write()。

我实际上如何让 write() 创建/写入文本文件?

void writeNumbers(int array[], int size, char* fname, int hexFlag) {

int fp;
int i;
char buf[512];


fp = open(fname, O_WRONLY | O_CREAT | O_APPEND);


if (fp < 0) {
close(fp);
char msg[] = "Cannot write";
write(STDOUT_FILENO, msg, sizeof(msg) - 1);
exit(1);
}


if (hexFlag == 0) {
for (i = 0; i < size; i++) {
snprintf(buf, sizeof(int), "%d ", array[i]);
write(fp, buf, sizeof(buf));
}
} else {
for (i = 0; i < size; i++) {
snprintf(buf, sizeof(int), "%x ", array[i]);
write(fp, buf, sizeof(int));
}
}
write(fp, "message", sizeof(buf));


close(fp);
}

在这里,我试图以十六进制或十进制格式打印一个整数数组。

最佳答案

snprintf()返回打印到传递的缓冲区中的字符数。它还将最大字符数作为第二个参数打印到缓冲区,这通常是缓冲区的大小,但也可能很少。

您想准确写出 snprintf() 返回的字符数。

        if (hexFlag == 0) {
for (i = 0; i < size; i++) {
int result = snprintf(buf, sizeof(buf), "%d ", array[i]);
if (0 > result)
{
write(STDERR_FILENO, "snprintf() failed.\n", strlen("snprintf() failed.\n"));
}
else
{
write(fp, buf, result);
}
}
}
else
...

一般建议:仔细阅读函数的文档。

关于c - 获取 write() 系统调用以写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26697682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com