C语言read函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言read函数相关的知识,希望对你有一定的参考价值。
在程序中我用
int iCountRead = read(sSGYFile->h, &local_trace_header, 240);
if (iCountRead != 240)
return false;
这句代码,读取240个字节数据,放到local_trace_header里面。
有时读出来的结果是正确的 iCountRead 个数是240,有时是错误的239个。
read 函数我让它读240个字节数它在什么情况下会读错呢?
可以肯定的是定位文件指针的时候是正确的。
打开文件源代码是
segy_file->h = open(segyPath, 4);
用的open函数,
#define O_RDONLY 1
#define O_WRONLY 2
#define O_RDWR 4
读写模式
int open(const char *path, int access,int mode);
可能是mode参数用的是他默认的吧 access和mode可以用一个|操作符吧?
那该怎样修改open的参数呢?
还可选择以下模式与以上3种基本模式相与:
O_CREAT 0x0100 创建一个文件并打开
O_TRUNC 0x0200 打开一个存在的文件并将文件长度设置为0,其他属性保此
O_EXCL 0x0400 未使用
O_APPEND 0x0800 追加打开文件
O_TEXT 0x4000 打开文本文件翻译CR-LF控制字符
O_BINARY 0x8000 打开二进制字符,不作CR-LF翻译
_read returns the number of bytes read, which might be less than count if there are fewer than count bytes left in the file or if the file was opened in text mode, in which case each carriage return–line feed (CR-LF) pair is replaced with a single linefeed character. Only the single linefeed character is counted in the return value. The replacement does not affect the file pointer.
注意这一段: in which case each carriage return–line feed (CR-LF) pair is replaced with a single linefeed character
就是说如果用text模式打开的话, 文件换行时可能在文本中有2个字符----换行和缩进(CR-LF), 而在return的时候系统是把它作为1个回车符号('\n')所返回的. 所以会导致这个情况
参考资料:msdn
参考技术A read()函数是文件操作函数在c语言中很重要,
函数的返回值如下:
(1)如果成功,返回读取的字节数;
(2)如果出错,返回-1并设置errno;
(3)如果在调read函数之前已是文件末尾,则返回0 参考技术B read函数(fread)。
read函数负责从文件句柄中读取指定数量的字节,并将这些字节放在标量型变量中。读者如果熟悉c的标准i/o函数fread的话,就会发现read函数也是以相同方式处理i/o缓冲的。为了提高效率,read函数并不是一次读取一个字节,而是读取一块数据并保存到临时存储区中。然后,c的fread函数与perl的read函数会从临时缓冲区将数据一次一个字节地传送给程序。(sysread函数可用于模拟c的底层i/o函数read。)该函数会返回读取的字节总数;或者在发生错误时,返回未定义的数字。如果碰到了eof(文件结束符),则返回0。
print函数(而不是write函数)负责输出read函数返回的实际字节。print函数类似于c中的fwrite函数。
R语言使用read.delim函数读取带分隔符的文本文件
以上是关于C语言read函数的主要内容,如果未能解决你的问题,请参考以下文章
arm6410,linux,c语言,read函数返回-1,错误:bad address