关于linux c编程的问题,从一个文件向另一个文件写入内容,最后却得到空文件,急求av网址大全正解

> linux下c编程,关于文件偏移量的文件读写问题,aboutlseek各位好:我的目的是,在文件首
linux下c编程,关于文件偏移量的文件读写问题,aboutlseek各位好:我的目的是,在文件首
maohd7677 & &
发布时间: & &
浏览:1 & &
回复:4 & &
悬赏:0.0希赛币
linux下c编程,关于文件偏移量的文件读写问题,about lseek!各位好: &
我的目的是,在文件首部和尾部写入新的内容, &
在实现的时候,我发现在尾部写入新的内容没有问题, &
但在首部,利用lseek将文件偏移量移到首部,再写入内容, &
重复运行的话,首部却没有发生变化。 &
按照想法,它应该比原来多新的内容才对。 &
感觉在首部写入的内容是覆盖写入,而不是插入写入。 &
这样的话,就感觉首部只写入了一次? &
管理首部和写入的程序片段如下,请大侠指点迷津。fd1是文件1的描述符,s是一个定义好了的字符数组, // 将fd1的偏移量设置为文件首部,在首部写入特殊字符串if(-1==lseek(fd1,0,SEEK_SET)) &
printf(&Cann't Seek\n&);else &
// 在测试时打开 &
printf(&Seek...SEEK_SET\n&);
// 写入特殊字符串if(write(fd1,s,sizeof(s))&sizeof(s)) &
printf(&写入特殊字符串时,已达文件末尾\n&); &
如果这样实现达不到首部插入写入的话,请大侠们指点个办法,怎么才能实现首部插入写入?谢谢了
如果要在首部加入内容,只能另外写新文件了
maojianhua & &
22:58:17 & &
& & (0)(0)把文件内容读到缓存中,在把添加的内容组织下然后写到原来文件里去
maojianbing & &
22:58:17 & &
& & (0)(0)那就把新写入的字节个数记录下来写入前,先把之前的字节往后挪然后再写入新字节但实际操作不如重新写个文件
maojianhao & &
22:58:17 & &
& & (0)(0)明确的讲,c不具备在文件内插入数据的功能.即你的要求绝对不行.maojianhua & &
22:58:17 & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&403 Forbidden
403 ForbiddenLinux下C编程:linux文件组织信息_c语言_51自学网
Linux下C编程:linux文件组织信息
与Linux 系统中的文件相关的信息有三项。它们是文件的目录结构、索引节点和文件的数据本身。 1.文件的目录结构 系统的每一个目录都处于一定的目录结构中,该结
与Linux 系统中的文件相关的信息有三项。它们是文件的目录结构、索引节点和文件的数据本身。
1.文件的目录结构
系统的每一个目录都处于一定的目录结构中,该结构含有目录中所有的目录项的列表,每一个目录项都含有一个名称和索引节点。借助于名称,,应用程序可以访问目录项的内容。而索引节点号则提供了所需引用文件自身的信息。
2.索引节点
在Linux 系统中,所有的文件都有一个与之相连的索引节点(inode)。索引节点是用来保存文件信息的。索引节点包含如下信息。
在linux2.6.39/include/asm-generic/stat.h中定义了stat 结构体来存放这些信息。stat 结构的定义如下。
struct stat
dev_t st_ /*device*/
ino_t st_ /*inode*/
mode_t st_ /*projection*/
nlink_t st_ /number of hard links*/
uid_t st_ /*user ID of owner*/
gid_t st_ /*group ID of owner*/
dev_t st_ /*device type(if inode device)*/
off_t st_ /*total size,in bytes*/
unsigned long st_ /*blocksize for filesystem*/
unsigned long st_ /*number of blocks allocated*/
time_t st_ /*time of last access*/
time_t st_ /*time of last modification*/
time_t st_ /*time of last change*/
可以通过系统调用访问stat 结构来获取索引节点的相关信息。
注:从索引节点包含的信息中,可以看到两个参数st_dev 和st_rdev。它们具有不同的含义。st_dev 对应于每一个文件名,代表包含这个文件名和相应的索引节点的文件系统的设备号。st_rdev 则只有字符设备文件或块设备文件才具有,表示的是实际设备的设备号。
通常文件中都包含有一定的数据。普通文件和目录文件都有相应的硬盘区域储存数据。这些数据是储存在由索引节点指定的位置上的。而其他一些特殊文件,如设备文件等,并不具有这样的在硬盘上的储存区域。
查看全套文章:
(责任编辑:admin)
------分隔线----------------------------
信号的发送的关键是使系统知道向哪个进程发送信号以及发送什么信号。其中要注意的是能...
对于不确定性问题,要想办法去确认,否则等待你的将会是Bug-----编程心得上个月在南京...
HashTable是在实际应用中很重要的一个结构,下面讨论一个简单的实现,虽然简单,但是...
u32 dispc_reg_in(u32 offset){ return (inl(offset)); //从端口读取4个连续的字节}该...
另类的VS.NET 的资源小气的神
突然发现自己IE的Favorites中有关dotnet的链...
使用一个CImageList控件来装入位图,用于TREE控件,其它的色彩都很正常就是橙色被显示成...
Linux下C编程:sigsuspend执行过程分析linux c调试的问题
linux c调试的问题
目前在开发linux下面的一个c项目,debug目前主要靠日志来定位问题。
想问问linux下有什么好的方法debug吗?定位问题。
比如突然process crash了,怎么知道是哪一句代码出问题的?
刚刚看linux编程看到gdb……这个可以调试的。
linux调试必然用gdb啊
编译的时候加上-g3或者-ggdb3,如果能捡到core文件,用gdb xx core,然后bt一下,回溯崩溃前的调用栈,多半可以定位到到底是执行到哪一部分发生了崩溃。
只有控制台,看一下 gdb
如果有界面的 codeblocks 配一配
process crash 不是有coredump文件可以查看吗。。题主参考:UNIX 程序常见问题的分析方法/developerworks/cn/aix/library/1206_yudh_unixproblemsolve/
gdb的三种用法;
1.调试自运行的可只执行程序;
比如自己写的myProgrammer. 编译的过程加上-g标识符,调试通过以下方式启动:
gdb myProgrammer
2.调试coredump文件;
某个进程有bug,突然crash了,如果系统打开了core dump标志,则会留下coredump文件(eg:core.71818):
调试core dump文件启动方式:
myProgrammer
core.71818
3.调试服务程序;
某个进程myService正在运行中,将gdb挂上去调试方法:
1)找到这个进程的进程号pid:
ps-fe| grep myService
2) gdb挂上去后调试:
gdb attach pid
关于gdb中通用调试命令的总结,请见《linux工具快速教程》gdb节:http://linuxtools-rst.readthedocs.org/zh_CN/latest/tool/gdb.html
关于linux程序调试还有很多工具,比如pstack等等,详见程序调试:http://linuxtools-rst.readthedocs.org/zh_CN/latest/advance/02_program_debug.html
附:需要进程crash后产生core dump文件,需要设置下系统:
1.core文件的生成开关和大小限制
1)使用ulimit -c命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。
ulimit -a :查看全部
ulimit -n:查看可以打开的文件句柄数目;
2)打开core开关
使用ulimit -c filesize命令,可以限制core文件的大小(filesize的单位为blocks)。
若ulimit -c unlimited,则表示core文件的大小不受限制。如果生成的信息超过此大小,将会被裁剪,最终生成一个不完整的core文件。在调试此core文件的时候,gdb会提示错误。
Copyright & 2016 phpStudy

我要回帖

更多关于 急求借贷 的文章

 

随机推荐