读和写文件

应用程序通过分别调用read write函数来执行输入和输出。
#include < unistd.h>
ssize_t read(int fd,void *buf ,size_t n);
ssize_t write(int fd,const void *buf,size_t n);


read 函数从描述符为fd的当前文件位置拷贝至多n个字节到存储器位置buf。返回值-1 表示读取错误,而返回值0表示EOF。否则,返回值表示的是实际传送的字节数量。
write 函数从存储器位置buf拷贝至多n个字节到描述符fd的当前文件位置。

#include < stdio.h>
int main(){
char c;
while(read(0,&c,1)!=0)
write(1,&c,1);
return 0;
}

read,write

在某些情况下,read write传送的字节比应用程序要求的要少。这些不足值不一定是错误。因为一些原因,会出现这样的情况:
1 读时遇到EOF。假设我们准备读一个文件,该文件从当前文件位置开始只含有20个字节,该文件从当前文件位置开始只含有20个字节,而我们以50个字节的组块,进行读取。这样一来,下一个read返回值不足为20,此后的read将通过返回0发出EOF信号。
2 从终端读文本行。如果打开文件是与终端相关联(例:键盘 显示器),那么每个read函数将一次传送一个文件行,返回的不足值等于文本行的大小。
3 读和写网络套接字:如果打开的文件对应于网络套接字,那么内部缓冲约束和较长的网络延迟会引起read write 返回不足值。
4 Linux中管道的read write ,也有可能出现不足值。

通常情况下,除了EOF,当你在读磁盘文件时,将不会遇到不足值,而且通常情况下,写磁盘文件时,也不会遇到不足值。然而 当我们需要创建健壮的应用程序时,我们需要返回的调用read write 和检测数据是否传送完毕(加入数据的验证机制)!

相关阅读:
linux c 打开文件的方法

读和写文件》上有1条评论

评论已关闭。