永发信息网

linux里的write是从文件末尾写,如果我想实现覆盖式写(清除原来的内容再写)行不行?

答案:4  悬赏:0  手机版
解决时间 2021-11-17 06:36
linux里的write是从文件末尾写,如果我想实现覆盖式写(清除原来的内容再写)行不行?
最佳答案
如果文件已经存在,并且文件是一个常规文件,而且你打开是是允许写入的, 那就在open文件时加入参数 O_TRUNC就可以了。追问这个我知道,但是我需要原来文件中的内容。我需要任何时候都能读,需要的时候才将原来的内容删除重写。怎么办?追答在那你需要删除内容的时候, 直接把文件remove掉, 重新创建不久可以了, 否则close掉, 然后
再以刚才我说的方式重新打开 也可以。

C语言没有那么智能, 很多事都可以帮你做好的。追问你说的第一种方式在我的测试软件里好像不太好。第二种方式重新打开文件描述符会不会有所改变呢?如果改变了的话,我的应用程序就不好写了。:-)追答那接下来就是程序怎么写的问题了, 你的程序好不好写, 问题就变为如何实现了。
全部回答
可以的,你可以用重定向的方式追问怎么弄?我只在程序里实现这种功能代码应该怎么写?
你说的是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知道是什么意思,但我不知道你想说的是什么
完全可以,清除可以用写0字符替代,再把文件指针移到开头不就好了,偏移指针可以fseek。追问能给个例子吗?追答char *ptr="0";
fwrite(const void * ptr,size_t size,size_t nmemb,FILE * fp);
fseek(fp,0,SEEK_SET);把fp指针移动到离文件开头0字节处;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
易经 有几卦,其中谦卦
奥迪a6avant什么颜色好看
祝你天天开心快乐用数字代表
.室速是什么意思?
四连地址在什么地方,想过去办事,
或说处杀蛟的古文名是什么
开水冷下后,能否 烧热 再喝?
多少人叫黄锦程我叫黄锦程
大庆公共汽车通勤卡充在去哪里,(除萨尔图外
致炫换了40的机油怎么办
求助,ELISA结果怎么处理
白天正常吃饭晚上吃煮红薯
云南省农村信用社24小时自助银行(东凤路古城
深圳5号线到3号线怎样走
38.6度是什么意思?
推荐资讯
货车老司机进来,求有关货车座椅总成知识
学落初畅的意思
室内u型楼梯设计尺寸一般是多少
有从唐县到安国的汽车吗
傲天领域txt全集下载
正品阿胶的价格多少钱一盒
老子的思想是怎么样的?
求改文gl百合,末世 重生文
今年爷爷69小丽3今年爷爷的年龄是小丽的多少
历史上姓潘的有多少名人
求好看的动漫电影 宫骑峻系列的、还有像萤火
筒体轴向应力和环向应力有什么关系?急
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?