将字符写入文件并替换之前的字符,而无需每次打开和关闭
Write characters to file and replace the previous one without opening and closing everytime
每当我有一个新字符串时,我都想在文件中写入并替换一个字符串。
例如
# | 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
如果将其移回并将内容重写到文件中,但请注意
根据 OS,在您 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
returns 缓冲区中产生的字符数,将其用作 write
.
的第三个参数
每当我有一个新字符串时,我都想在文件中写入并替换一个字符串。 例如
# | 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
如果将其移回并将内容重写到文件中,但请注意
根据 OS,在您
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
returns 缓冲区中产生的字符数,将其用作write
. 的第三个参数