linux里的write是从文件末尾写,如果我想实现覆盖式写(清除原来的内容再写)行不行?
答案:4 悬赏:0 手机版
解决时间 2021-11-17 06:36
- 提问者网友:回忆在搜索
- 2021-11-16 11:02
linux里的write是从文件末尾写,如果我想实现覆盖式写(清除原来的内容再写)行不行?
最佳答案
- 五星知识达人网友:一秋
- 2021-11-16 12:06
如果文件已经存在,并且文件是一个常规文件,而且你打开是是允许写入的, 那就在open文件时加入参数 O_TRUNC就可以了。追问这个我知道,但是我需要原来文件中的内容。我需要任何时候都能读,需要的时候才将原来的内容删除重写。怎么办?追答在那你需要删除内容的时候, 直接把文件remove掉, 重新创建不久可以了, 否则close掉, 然后
再以刚才我说的方式重新打开 也可以。
C语言没有那么智能, 很多事都可以帮你做好的。追问你说的第一种方式在我的测试软件里好像不太好。第二种方式重新打开文件描述符会不会有所改变呢?如果改变了的话,我的应用程序就不好写了。:-)追答那接下来就是程序怎么写的问题了, 你的程序好不好写, 问题就变为如何实现了。
再以刚才我说的方式重新打开 也可以。
C语言没有那么智能, 很多事都可以帮你做好的。追问你说的第一种方式在我的测试软件里好像不太好。第二种方式重新打开文件描述符会不会有所改变呢?如果改变了的话,我的应用程序就不好写了。:-)追答那接下来就是程序怎么写的问题了, 你的程序好不好写, 问题就变为如何实现了。
全部回答
- 1楼网友:野味小生
- 2021-11-16 15:18
可以的,你可以用重定向的方式追问怎么弄?我只在程序里实现这种功能代码应该怎么写?
- 2楼网友:千夜
- 2021-11-16 14:21
你说的是APUE上的很经典的一个例子
源代码如下:
#include
#include
#include
#define BUFFSIZE 4096
int main(void)
{
int n;
char buf[BUFFSIZE];
while ((n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0)
{
if (write(STDOUT_FILENO, buf, n) != n)
{
perror("write error");
exit(1);
}
}
if (n < 0)
{
perror("read error");
exit(1);
}
exit(0);
}
较原来的作了少许改动,这种代码应该能读懂吧。
追问代码我i知道是什么意思,但我不知道你想说的是什么
源代码如下:
#include
#include
#include
#define BUFFSIZE 4096
int main(void)
{
int n;
char buf[BUFFSIZE];
while ((n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0)
{
if (write(STDOUT_FILENO, buf, n) != n)
{
perror("write error");
exit(1);
}
}
if (n < 0)
{
perror("read error");
exit(1);
}
exit(0);
}
较原来的作了少许改动,这种代码应该能读懂吧。
追问代码我i知道是什么意思,但我不知道你想说的是什么
- 3楼网友:酒安江南
- 2021-11-16 13:44
完全可以,清除可以用写0字符替代,再把文件指针移到开头不就好了,偏移指针可以fseek。追问能给个例子吗?追答char *ptr="0";
fwrite(const void * ptr,size_t size,size_t nmemb,FILE * fp);
fseek(fp,0,SEEK_SET);把fp指针移动到离文件开头0字节处;
fwrite(const void * ptr,size_t size,size_t nmemb,FILE * fp);
fseek(fp,0,SEEK_SET);把fp指针移动到离文件开头0字节处;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯