社区
系统维护与使用区
帖子详情
linux下的c编程一问:怎样读取文件的最后一行并修改?
东门河蟹
2001-07-04 09:32:53
就是说,要读取文件的最后一行,并修改这一行后存盘。
一定给分!
...全文
1219
15
打赏
收藏
linux下的c编程一问:怎样读取文件的最后一行并修改?
就是说,要读取文件的最后一行,并修改这一行后存盘。 一定给分!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
leechie
2001-07-05
打赏
举报
回复
对不起从来没用过fgetc
一般我用read来读!
hotfire():这样子应该可以吧?
char ch,buffer[2048];
int i=0;
void reserve(char *buffer)
{
int len,i;
char ch;
len=strlen(buffer);
for(i=0;i<len/2;i++)
{
ch=buffer[i];
buffer[i]=buffer[len-i];
buffer[len-i]=ch;
}
return;
}
...
fseek(hFile, 0L, SEEK_END);
for(;;)
{
if((ch=fgetc(hFile))!='\n')
{
buffer[i++]=ch;
fseek(hFile, -iL, SEEK_END);
}
else
{
buffer[i]='\0';
break;
}
}
reserve(buffer);
hotfire
2001-07-05
打赏
举报
回复
呵呵,没细看leechie的程序,他的是反序放的。
加个补丁
char buf[2048];
char ch,buffer[2048];
int i=0;
int j;
...
fseek(hFile, 0L, SEEK_END);
for(::)
{
if((ch=fgetc(hFile))!='\n')
{
buffer[i++]=ch;
fseek(hFile, -2L, SEEK_CUR);
}
else
{
buffer[i]='\0';
break;
}
}
j=strlen(buffer)-1;
i=0;
for(;i>=0;j--)
{
buf[i++]=buffer[j];
}
buf[i]='\0'
/*buf里放的就是读出来的最后一行。*/
/*修改,往最后一行加一句话*/
strcat(buf, "I like linux");
/*写回到文件*/
fwrite(buf, sizeof(char), strlen(buf), hFile);
...
东门河蟹
2001-07-05
打赏
举报
回复
还有问题,假如说我的文件最后一行是:
abcdefg!
那么,我最后得到的结果是:
!gfedcbaI like linux
hotfire
2001-07-05
打赏
举报
回复
我来总结一下吧。
char ch,buffer[2048];
int i=0;
...
fseek(hFile, 0L, SEEK_END);
for(::)
{
if((ch=fgetc(hFile))!='\n')
{
buffer[i++]=ch;
fseek(hFile, -2L, SEEK_CUR);
}
else
{
buffer[i]='\0';
break;
}
}
/*buffer里放的就是读出来的最后一行。*/
/*修改,往最后一行加一句话*/
strcat(buffer, "I like linux");
/*写回到文件*/
fwrite(buffer, sizeof(char), strlen(buffer), hFile);
...
东门河蟹
2001-07-05
打赏
举报
回复
我还是不懂啊
leechie
2001-07-05
打赏
举报
回复
对不起,没有调试就发出去了!
谢谢各位大虾指教!!!
东门河蟹
2001-07-05
打赏
举报
回复
还是不对,应该为
for(i=0;i<len/2;i++)
{
ch=buffer[i];
buffer[i]=buffer[len-i-1];
buffer[len-i-1]=ch;
}
同时还应该加上一句:
buffer[len-1]='\0';
这样也没有怪字符了
东门河蟹
2001-07-05
打赏
举报
回复
char ch,buffer[2048];
int i=0;
void reserve(char *buffer)
{
int len,i;
char ch;
len=strlen(buffer);
for(i=0;i<len/2;i++) //for(i=0;i<(len-1)/2;i++)
{ //{
ch=buffer[i]; //ch=buffer[i];
buffer[i]=buffer[len-i]; //buffer[i]=buffer[len-i-1];
buffer[len-i]=ch; //buffer[len-i-1]=ch;
} //}
return;
}
...
fseek(hFile, 0L, SEEK_END);
for(;;)
{
if((ch=fgetc(hFile))!='\n')
{
buffer[i++]=ch;
fseek(hFile, -iL, SEEK_END);
}
else
{
buffer[i]='\0';
break;
}
}
reserve(buffer);
还有问题啊,其中buffer[len]="\0";所以得改为以上的!
另外buffer最后面总是多了一个怪字符,不知怎么解决
另外,如果我修改后的buffer比原来的buffer长度小,最后
肯定是这样的:
比如我原来为:abcdefghi
我想修改为:abcd
那结果肯定是:abcd fghi
中间的空格表示那个怪字符
hotfire
2001-07-05
打赏
举报
回复
TO:leechie
可以可以,比我的偷懒的方法好多了。
hotfire
2001-07-04
打赏
举报
回复
fseek(hFile, 0L, SEEK_END);
for(::)
{
if(fgetc(hFile)!='\n')
{
fseek(hFile, -2L, SEEK_CUR);
}
else
break;
}
在这里开始读到EOF,读出来的就是最后一行。
东门河蟹
2001-07-04
打赏
举报
回复
没人知道么?
hotfire
2001-07-04
打赏
举报
回复
楼上那位,应该fseek(hFile, -2L, SEEK_CUR);
当你fgetc后,seek指针会自动+1的,如你-1的话,读出来的永远是同一个字符。
leechie
2001-07-04
打赏
举报
回复
char ch,buffer[2048];
int i=0;
...
fseek(hFile, 0L, SEEK_END);
for(::)
{
if((ch=fgetc(hFile))!='\n')
{
buffer[i++]=ch;
fseek(hFile, -1L, SEEK_CUR);
}
else
{
buffer[i]='\0';
break;
}
}
hotfire
2001-07-04
打赏
举报
回复
放你自己定义的BUFFERJ里
东门河蟹
2001-07-04
打赏
举报
回复
这样的话,读出来的最后一行放在哪里?
linux
下c语言高级
编程
入门
本课程主要学习
linux
下的各种API以及
linux
下常用命令的使用,从开发环境的搭建到
一行
一行
的编写小示例来完成各个API的调用,通过学习本课程可以很轻松进入
linux
、C语言高级
编程
的世界。
Linux
系统
编程
第2期:文件IO
编程
实战
本课程是《嵌入式工程师自我修养》自学教程第 3 步:
Linux
系统
编程
第02期。本期课程主要介绍跟文件、目录相关的文件IO函数的使用,通过
编程
实战形式,实现了常用的shell命令:lscatrmdirwc等。以及实现音频播放器V2.0版本:支持循环列表播放。通过10来个
Linux
环境下shell命令的
编程
实现,达到熟练掌握文件IO
编程
的学习目标。
Linux
系统
编程
第05期:进程间通信
Linux
系统提供了各种系统调用API用于进程之间的通信: 无名管道PIPE 命名管道FIFO 消息队列 共享内存 信号量 文件锁 信号signal....其中还包括system V和POSIX 两种接口标准,除此之外,
Linux
系统自身还扩展了自己的一套API接口用于进程间通信,比如signalfd、timerfd、eventfd等。本视频教程为《
Linux
系统
编程
》第05期,本期课程将会带领大家学习
Linux
下将近15种进程间通信IPC工具的使用,了解它们的通信机制、
编程
实例、使用场景、内核中的实现以及各自的优缺点。本课程会提供PDF版本的PPT课件和代码,学员购买课程后可到课程主页自行下载嵌入式自学路线指导图:------------------------------------------------------------------------------------------------------ 《嵌入式工程师自我修养》嵌入式自学系列教程 作者:王利涛------------------------------------------------------------------------------------------------------一线嵌入式工程师精心打造,嵌入式学习路线六步走: 第 1 步:
Linux
三剑客零基础玩转
Linux
+UbuntuGit零基础实战:
Linux
开发技能标配vim从入门到精通基础篇:零基础学习vim基本命令vim从入门到精通定制篇:使用插件打造嵌入式开发IDEmakefile工程实践基础篇:从零开始一步一步写项目的Makefilemakefile工程实践第2季:使用Autotools自动生成Makefile软件调试基础理论printf打印技巧
Linux
内核日志与打印使用QEMU搭建u-boot+
Linux
+NFS嵌入式开发环境第 2 步:C语言嵌入式
Linux
高级
编程
第1期:C语言进阶学习路线指南第2期:计算机架构与ARM汇
编程
序设计第3期:程序的编译、链接和运行原理第4期:堆栈内存管理第6期:数据存储与指针第7期:嵌入式数据结构与
Linux
内核的OOP思想第8期:C语言的模块化
编程
第9期:CPU和操作系统入门 搞内核驱动开发、光会C语言是不行的! 你还需要学习的有很多,包括:计算机体系架构、ARM汇编、程序的编译链接运行原理、CPU和操作系统原理、堆栈内存管理、指针、
linux
内核中的面向对象思想、嵌入式系统架构、C语言的模块化
编程
.....第 3 步:
Linux
系统
编程
第00期:
Linux
系统
编程
入门第01期:揭开文件系统的神秘面纱第02期:文件I/O
编程
实战第03期:I/O缓存与内存映射第04期:打通进程与终端的任督二脉第05期:进程间通信-------------------we are here! 第 4 步:
Linux
内核
编程
练乾坤大挪移,会不会九阳神功,是一道坎。搞驱动内核开发,懂不懂内核也是一道坎。第 5 步:嵌入式驱动开发 芯片原理、datasheet、硬件电路、调试手段、总线协议、内核机制、框架流程....第 6 步:项目实战 嵌入式、嵌入式人工智能、物联网、智能家居...
Linux
系统
编程
练手项目:使用C语言实现协程
协程是最近几年比较火的一个概念,尤其是在互联网后台、手机游戏后台等场景中被大量使用。它跟我们经常使用的进程、线程有什么区别呢?有哪些优势呢?本期课程为《
Linux
系统
编程
》的练手项目:带领大家从零开始,使用仅仅50余行代码,就可以实现一个简单的协程,实现协程的三个基本API接口函数:create、yield、resume。从最开始的汇编开始,到最上层的API的封装,通过这个小项目的实战训练,让你真正理解协程的概念。
Socket
编程
系列之1:
Linux
-API网络
编程
入门实战
Socket
编程
系列初步计划:Socket
编程
系列之1:
Linux
-API 网络
编程
入门实战Socket
编程
系列之2: Windows-API 网络
编程
入门实战Socket
编程
系列之3: Muduo 网络
编程
入门实战Socket
编程
系列之4: Libevent 网络
编程
入门实战Socket
编程
系列之5: Libcurl 网络
编程
入门实战Socket
编程
系列之6: Boost-ASIO 网络
编程
入门实战----------------------------------------------------Socket
编程
系列之1:
Linux
-API网络
编程
入门实战
Linux
编程
环境
Linux
文件系统TCP/IP协议简介应用层协议简介TCP网络
编程
基础IO复用机制UDP网络
编程
基础UDP单播多播广播套接字选项原始套接字与洪水攻击网络服务器选型分析http手撕代码与流程TCP滑动窗口机制分析
系统维护与使用区
19,612
社区成员
74,603
社区内容
发帖
与我相关
我的任务
系统维护与使用区
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
复制链接
扫一扫
分享
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章