linux下用函数和系统调用分别实现计算文件长度(不解) 学习笔记
来源:互联网 发布:光信息科学与技术知乎 编辑:程序博客网 时间:2024/05/01 23:38
本文为在下学习当中遇到的一些问题,写下来作学习笔记。 平时没注意这些的朋友可以看看,懂的朋友请指点一二,谢谢!
用函数(fgetc)和系统调用(lseek,read)分别实现计算文件长字节数,但是两者存在差别,源码如下:
mycount2.c
#include <stdio.h>int main(int argc,char *argv[]){ int i=0; FILE *fp; char ch; fp=fopen(argv[1],"r"); while((ch=fgetc(fp))!=EOF) { printf("i=%d\n",i); //测试时输出i的值,非必要 printf("ch=%c(%d)\n",ch,ch); //测试时输出c的值,非必要 i++; } printf("%dBytes\n",i); return 0;}
mycount.c
#include <stdio.h>#include <fcntl.h>int main(int argc,char *argv[]){int fd,i=0;char buf[1];char ch;if(argc!=2){printf("arguments error\n");exit(1);}if((fd=open(argv[1],O_RDONLY))==-1){printf("open error,or file is not exist\n");exit(2);}do{lseek(fd,i,SEEK_SET);read(fd,buf,1);ch=buf[0];printf("i=%d\n",i); //测试时输出i的值,非必要printf("ch=%c(%d)\n",ch,ch); //测试时输出c的值,非必要i++;}while(ch!=EOF);close(fd);printf("total %d bytes\n",i);return 0;}
用以测试的文件file2内容如下:
程序一运行结果:
程序2运行部分结果:
可以看到,file2文件结束是以ascii码10(LF换行符)为标志的。
现在问题就出来了:
1、在file2中123后面换行到10,从程序输出结果i=7(也就是文件的第8个字符)的时候。但是同样是换行符,为什么i=7时的这个没有被系统作为文件结束的标志?
2、从程序2的输出可以看到,i=10的时候,已经到了文件末尾。但是程序2并没有正常退出,而是陷入死循环。两个程序同样都是判定EOF来作为结束的条件,为什么第一个程序能正常退出,而第二个却不能?
3、EOF在linux的值到底是多少?网上有说是-1,但是程序运行结果怎么没有看到-1.取而代之的却是LF?
- linux下用函数和系统调用分别实现计算文件长度(不解) 学习笔记
- Linux操作系统下,通过系统调用和库函数分别实现对文件的拷贝
- Linux操作系统下,通过系统调用和库函数分别实现对文件的拷贝
- 函数调用实现计算字符串长度
- Linux下的C语言编程——系统调用read和write函数实现文件拷贝
- linux下用c库和系统调用实现文件的复制
- 2.6版本Linux上替换系统调用函数实现隐藏文件学习
- (cc)2.6版本Linux上替换系统调用函数实现隐藏文件学习
- 1、win10下连接本地系统上的Linux操作系统(分别以Nat方式和桥接模式实现)
- linux和win系统下有关时间的计算函数
- 计算该日在本年中是第几天?注意瑞年问题。(分别用结构体变量和函数实现)
- linux学习笔记(四)系统调用
- linux应用编程笔记(5)系统调用文件编程方法实现文件复制
- LS8-linux系统调用方式文件编程之学习笔记
- Linux系统编程学习笔记(3)-Linux文件系统与相关函数调用
- linux下不解包查看tar包文件内容
- linux系统调用学习笔记
- Linux计算求取文件长度
- 书单
- ubuntu下vncserver配置
- 关注健康——23岁女白领因胃溃疡去世 微薄记下最后时刻
- Ubuntu下使用SVN
- cuda 4.0 在vs2010下使用的Bug解除
- linux下用函数和系统调用分别实现计算文件长度(不解) 学习笔记
- 书单
- 类图画法 http://blog.csdn.net/xhf55555/article/details/6896316
- 入门视频采集与处理(BT656简介)
- String StringBuffer StringBuilder 三者的区别
- QT 常用部件 (四)自动完成LineEdit
- isbn
- 汇文问题汇总+ORACLE
- 关于写Windows service程序启动和停止需要注意的几个地方