一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語(yǔ)言-fseek不起作用寫(xiě)操作定位無(wú)效簡(jiǎn)析

嵌入式那些事 ? 來(lái)源:嵌入式那些事 ? 2023-05-04 09:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

情況說(shuō)明

最近在寫(xiě)一個(gè)操作文件的函數(shù),使用fseek()函數(shù)定位到文件某個(gè)位置,然后用fwrite()重新更新該位置的內(nèi)容,發(fā)現(xiàn)該位置處的內(nèi)容并沒(méi)有更新,反而更新的內(nèi)容竟然出現(xiàn)在了文件末尾,真的是不知道什么情況。

問(wèn)題復(fù)現(xiàn)

下面先簡(jiǎn)單復(fù)現(xiàn)我所遇到的問(wèn)題吧,示例代碼如下:

/*
*By:AilsonJack
*Date:2019.01.24
*Blog:www.only2fire.com
*Des:fseek測(cè)試
*/

#include

intmain(void)
{
char*fileName="test.txt";
charch='W';
FILE*fp=NULL;
intiRet=0;

fp=fopen(fileName,"a+");
if(!fp)
{
printf("open%sfailed!
",fileName);
return-1;
}

iRet=fseek(fp,0,SEEK_SET);/*定位指針到文件頭*/
if(iRet

將上述代碼編譯,然后在編譯輸出文件所在的文件夾中創(chuàng)建一個(gè)test.txt文件,內(nèi)容為:

123456789abcdef

cda0ac38-e87f-11ed-ab56-dac502259ad0.png

2019-01-24_185403

cdb32fd4-e87f-11ed-ab56-dac502259ad0.png

2019-01-24_185449

接著運(yùn)行程序,打開(kāi)test.txt,可以看到內(nèi)容(字符W)被寫(xiě)到文件的末尾了:

cdbcb392-e87f-11ed-ab56-dac502259ad0.png

2019-01-24_185803

cdd3f9d0-e87f-11ed-ab56-dac502259ad0.png

2019-01-24_185815

原因分析

這是什么情況,明明使用fseek定位到文件的開(kāi)頭了,但是實(shí)際卻寫(xiě)入到了文件末尾,好吧,當(dāng)時(shí)我也是挺困惑的,難道是寫(xiě)fseek()接口函數(shù)的哥們還遺留有什么bug。后來(lái)上網(wǎng)查證,發(fā)現(xiàn)這是我們打開(kāi)文件的所使用的模式"a+"在作怪。下面看看對(duì)該模式的描述,直接在終端輸入:man fopen:

cde31032-e87f-11ed-ab56-dac502259ad0.png

2019-01-24_190507

其中對(duì)fopen()函數(shù)涉及的a與a+模式的描述如下:

a:Open for appending (writing at end of file). The file is created if it does not exist. The stream is positioned at the end of the file.

a+:Open for reading and appending (writing at end of file). The file is created if it does not exist. The initial file position for reading is at the beginning of the file, but output is always appended to the end of the file.

上述對(duì)a與a+模式的描述大致內(nèi)容是:打開(kāi)一個(gè)文件,如果該文件不存在將創(chuàng)建文件,初始化的文件讀指針位于文件的開(kāi)頭;對(duì)于文件的寫(xiě)操作,則始終將寫(xiě)入內(nèi)容追加到文件的末尾,與文件指針沒(méi)有關(guān)系。

想必看到這里,大家也明白了。如果想使用fseek()函數(shù)定位寫(xiě)操作指針,那么就修改fopen()涉及的模式,這里修改為"r+",就能實(shí)現(xiàn)將內(nèi)容寫(xiě)到文件的開(kāi)始了,對(duì)于自己的程序大家還是根據(jù)實(shí)際情況修改為相應(yīng)的模式。

ce01b1e0-e87f-11ed-ab56-dac502259ad0.png






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7632

    瀏覽量

    141676

原文標(biāo)題:C語(yǔ)言-fseek不起作用,寫(xiě)操作定位無(wú)效

文章出處:【微信號(hào):嵌入式那些事,微信公眾號(hào):嵌入式那些事】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    IAP中斷向量不起作用

    致力于STM32F051。 引導(dǎo)加載程序工作正常,但即使將向量表定位到SRAM后,應(yīng)用程序文件中的中斷向量也不起作用。 任何解決方案將不勝感激。以上來(lái)自于谷歌翻譯以下為原文 Working
    發(fā)表于 11-27 15:56

    ShortCut of Comment/Uncomment Selection不起作用

    在PSoC造飾器3.3中按下Ctrl +E、C/CTRL+E、U是不起作用的。誰(shuí)能告訴我發(fā)生了什么事?謝謝您! 以上來(lái)自于百度翻譯 以下為原文It does not work to press
    發(fā)表于 02-25 08:53

    示例固件不起作用?

    示例固件不起作用?以上來(lái)自于谷歌翻譯以下為原文 Sample firmware not working?
    發(fā)表于 04-08 16:38

    程序不起作用

    已經(jīng)改為更高版本。我遇到的問(wèn)題是用戶(hù)必須在使用程序之前通過(guò)VEE中的.NET程序集參考菜單重新加載較新的DLL。沒(méi)有它,該程序不起作用(因?yàn)樗?b class='flag-5'>C:\ Program Files \ Agilent
    發(fā)表于 04-22 13:56

    按鍵掃描程序不起作用

    ,結(jié)果也是WK_UP無(wú)效,也是不管按下不按下,都不起作用,我用萬(wàn)用表測(cè)試了這個(gè)按鍵,這個(gè)按鍵完好,就不知道問(wèn)題出在哪里?是不是板子電路的問(wèn)題,求救!??!
    發(fā)表于 05-20 04:35

    FX3 DVK板讀取操作不起作用

    嗨,我用的是FX3 DVK板。我想使用GPIF II作為主模式。寫(xiě)操作良好。讀取操作不起作用。在DMA事件上不調(diào)用回調(diào)函數(shù)。你能解決這個(gè)問(wèn)題嗎?請(qǐng)檢查附件。問(wèn)候JW郵編1.8兆字節(jié)
    發(fā)表于 05-20 15:07

    使用LabVIEW VISA例程讀寫(xiě)操作不起作用

    的讀寫(xiě)操作不起作用。有什么不同? 以上來(lái)自于谷歌翻譯 以下為原文I'm trying to use an E5810 with an Anritsu ME522A bit error
    發(fā)表于 08-01 08:37

    能量收集不起作用

    你好, 我從核L476RG,MEMS和NFC02A1開(kāi)始。我嘗試將MEMS數(shù)據(jù)寫(xiě)入nfc標(biāo)簽及其工作。我的問(wèn)題是當(dāng)我嘗試使用能量收集模式時(shí),它不起作用,我不知道為什么。我在nfc多維數(shù)據(jù)集中使用這個(gè)
    發(fā)表于 08-01 10:58

    如何解決串口接收中斷不起作用的問(wèn)題?

    如何解決串口接收中斷不起作用的問(wèn)題?
    發(fā)表于 12-09 07:38

    mcp3421 18不起作用是怎么回事?

    =i2c.read() cifra3=i2c.read() i2c.end() 打印 cifra1 打印 cifra2 打印cifra3 結(jié)束 i2c.write(28
    發(fā)表于 04-26 08:02

    Freemaster記錄器不起作用怎么解決?

    我創(chuàng)建了一個(gè)記錄器,但它不起作用。出現(xiàn)錯(cuò)誤 0x80000081(無(wú)效命令)。我還添加了 FMSTR_Recorder(0)。
    發(fā)表于 05-18 07:40

    模型不起作用時(shí)的解決辦法

    你的團(tuán)隊(duì)幾個(gè)月來(lái)一直在收集數(shù)據(jù)、構(gòu)建預(yù)測(cè)模型、創(chuàng)建用戶(hù)界面,并與一些早期的用戶(hù)一起部署新的機(jī)器學(xué)習(xí)產(chǎn)品。但你現(xiàn)在聽(tīng)到的并不是大家一起慶祝項(xiàng)目勝利的聲音,而是聽(tīng)到產(chǎn)品經(jīng)理對(duì)那些早期用戶(hù)的抱怨,這些早期用戶(hù)對(duì)模型精度不滿(mǎn)意并開(kāi)始認(rèn)為“模型不起作用”。所以你現(xiàn)在應(yīng)該做什么?
    的頭像 發(fā)表于 05-04 09:54 ?3263次閱讀

    時(shí)控開(kāi)關(guān)為什么不起作用,其中的原因是什么

    時(shí)控開(kāi)關(guān)不起作用:簡(jiǎn)單解釋就是時(shí)控開(kāi)關(guān)設(shè)置好了定時(shí)時(shí)間,但是到時(shí)間不工作,是怎么回事? 目前時(shí)控開(kāi)關(guān)分為兩種:按鍵式時(shí)控開(kāi)關(guān)和藍(lán)牙時(shí)控開(kāi)關(guān),咱們分開(kāi)來(lái)講解: 按鍵式時(shí)控開(kāi)關(guān)不工作原因:1.校時(shí)(時(shí)間
    發(fā)表于 01-07 15:06 ?2.2w次閱讀

    解決西門(mén)子觸摸屏變量的數(shù)值更改事件有時(shí)不起作用

    為什么西門(mén)子觸摸屏變量的數(shù)值更改事件,有時(shí)不起作用。是因?yàn)椴杉J經(jīng)]有選擇,在菜單欄里右鍵屬性,勾上采集模式,然后選擇循環(huán)連續(xù)。
    的頭像 發(fā)表于 11-08 17:22 ?8230次閱讀

    KT142C語(yǔ)音芯片配置文件總是不起作用?配置文件的問(wèn)題集中歸納

    KT142C語(yǔ)音芯片配置文件總是不起作用?配置文件的問(wèn)題集中歸納
    的頭像 發(fā)表于 10-20 15:04 ?928次閱讀
    KT142<b class='flag-5'>C</b>語(yǔ)音芯片配置文件總是<b class='flag-5'>不起作用</b>?配置文件的問(wèn)題集中歸納