gpt4 book ai didi

c - 将字符写入文件并替换之前的字符,而无需每次打开和关闭

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

每当我有一个新文件时,我都想在文件中写入并替换一个字符串。例如

  #  | String in file
1 | 10
2 | 23
3 | 98

我只想打开和关闭文件一次。我想在不附加到文件末尾的情况下编写字符串。这是用于测试写入系统调用的代码

int value = 0;
int filedesc = open("testfile.txt", O_WRONLY, S_IWRITE);
if (filedesc < 0) {
printf("Failed\n");
return -1;
}
write(filedesc, "1", 1);
char buffer[4];
sprintf(&buffer[0], "%d",value );
printf("%s", buffer);
write(filedesc, buffer, 1);

testfile.txt 上的程序结果是:

11

如何让 fileDesc 的指针在每次写入时都保持为 0?或者,如果您对此有任何其他建议,请告诉我。谢谢。

最佳答案

您可以使用 lseek 重新定位与文件描述符关联的偏移量系统调用:

lseek(filedesc, 0L, SEEK_SET); // move the offset back to start of file

如果将其移回并将内容重写到文件中,但请注意

  • 根据操作系统的不同,文件内容可能对其他进程不可用,直到您 close文件描述符,但您可以尝试 close(dup(filedesc));

  • 您可能需要使用 ftruncate 截断文件内容系统调用。参数是:int ftruncate(int filedesc, off_t length);

  • open("testfile.txt", O_WRONLY, S_IWRITE); 打开文件不会创建它,因此不使用第三个参数。要创建文件,请使用 O_CREAT标记并使文件可读:filedesc = open("testfile.txt", O_CREAT | O_WRONLY, S_IREAD | S_IWRITE);

  • 4 个字符的缓冲区对于某些人来说可能太小了 int值。你应该使用 snprintf以避免缓冲区溢出。 snprintf返回缓冲区中产生的字符数,将其用作 write 的第三个参数.

关于c - 将字符写入文件并替换之前的字符,而无需每次打开和关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34036621/

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