LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 770|回复: 1

read,write文件时,为何多出来一行

[复制链接]
发表于 2003-9-1 09:17:35 | 显示全部楼层 |阅读模式

  1. #include<unistd.h>
  2. #include<sys/types.h>
  3. #include<sys/stat.h>
  4. #include<fcntl.h>
  5. #include<stdlib.h>
  6. #include<stdio.h>
  7.                                                                                                                                                
  8. int main(void)
  9. {
  10.         int fdsrc, fdnull, fdtmp, numbytes;
  11.         int flags=O_CREAT | O_EXCL | O_WRONLY;
  12.         char buf[10];
  13.                                                                                                                                                
  14.         if ((fdsrc=open("fdread.c", O_RDONLY, 0644))==-1){
  15.                 perror("open fdread.c");
  16.                 exit(1);
  17.         }
  18.         if ((fdnull=open("/dev/null", O_WRONLY))==-1){
  19.                 perror("open /dev/null");
  20.                 close(fdsrc);
  21.                 exit(1);
  22.         }
  23.         if ((fdtmp=open("/tmp/foo.bar", flags, 0644))==-1){
  24.                 perror("open /tmp/foo.bar");
  25.                 close(fdsrc);
  26.                 close(fdnull);
  27.                 exit(1);
  28.         }
  29.                                                                                                                                                
  30.         while((numbytes=read(fdsrc, buf, 10))>0){
  31.                 if(write(fdnull, buf, 10)==-1){
  32.                         perror("write /dev/null");
  33.                 }
  34.                 if(write(fdtmp, buf, 10)==-1){
  35.                         perror("write /tmp/foo.bar");
  36.                 }
  37.         }
  38.         close(fdsrc);
  39.         close(fdnull);
  40.         close(fdtmp);
  41.         exit(0);
  42. }
复制代码

运行后,more /tmp/foo.bar的结果不但打印了上述源代码,还在最后一行显示了一句
xit(0);
请问这是何原因
发表于 2003-9-1 10:06:32 | 显示全部楼层
if ((fdsrc=open("fdread.c", O_RDONLY, 0644))==-1){
不是新建文件就不需要第三个参数(0644),不过这个和你的问题没什么关系
read、write应该是
while((numbytes=read(fdsrc, buf, 10))>0){
if(write(fdnull, buf, numbytes)==-1){
write的时候应该写入读出的字节数而不是缓冲区大小
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表