每当我有一个新文件时,我想写一个文件中的字符串。 例如
# | String in file
1 | 10
2 | 23
3 | 98
我只想打开和关闭文件一次。 我想写字符串而不附加到文件的末尾。 这是测试write sys-call
的代码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?或者,如果您有任何其他建议,请告诉我。 谢谢。
答案 0 :(得分:1)
您可以使用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);
对于某些int
值,4个字符的缓冲区可能太小。您应该使用snprintf
来避免缓冲区溢出。 snprintf
返回缓冲区中生成的字符数,将其用作write
的第三个参数。