LinuxSir.cn,穿越时空的Linuxsir!

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

这个Read()错在哪里?

[复制链接]
发表于 2004-3-27 12:45:52 | 显示全部楼层 |阅读模式
  1. # cat Read.c
  2. #include <stdio.h>
  3. #include <unistd.h>
  4. #include <sys/types.h>
  5. #define MAXLINE 8192
  6. ssize_t
  7. read(int fd, void * buf,ssize_t n)
  8. {
  9.         if((n=read(fd,buf,MAXLINE)) != n ) {
  10.                printf("read error\n");
  11.                return(-1);
  12.         }
  13.         return(n);
  14. }

  15.               
  16. /mnt/d/err_pro# gcc -c Read.c
  17. Read.c:7: conflicting types for `read'
  18. /usr/include/unistd.h:310: previous declaration of `read'
  19. /mnt/d/err_pro#
复制代码


我照MANUAL做了@@请问错在哪里??
发表于 2004-3-27 12:53:24 | 显示全部楼层
/usr/include/unistd.h

里有个函数是read()

自己查查。。你自己定义的函数(read())改名为read_new()吧。。。。
 楼主| 发表于 2004-3-27 13:00:55 | 显示全部楼层
谢谢qing!!!
我太粗心了,函数的命也叫read()了,应该换个新的名字。:thank
发表于 2004-3-27 18:57:00 | 显示全部楼层
怎么能这么写呢?
if((n=read(fd,buf,MAXLINE)) != n ) {
应该定义一个局部变量
 楼主| 发表于 2004-3-27 21:38:49 | 显示全部楼层
:thank :thank 请问怎么定局部变量呢??
发表于 2004-3-27 21:51:50 | 显示全部楼层
if((n=read(fd,buf,MAXLINE)) != n )
应该是!=MAXLINE吧?
 楼主| 发表于 2004-3-27 22:03:17 | 显示全部楼层
最初由 wuhu 发表
if((n=read(fd,buf,MAXLINE)) != n )
应该是!=MAXLINE吧?

想想都不对,应该是 <0 ,一时没注意。。:rolleyes:
发表于 2004-3-27 22:05:04 | 显示全部楼层
我不知道你到底要实现什么功能,根据你写的函数,似乎下面这个就可以:

  1. ssize_t
  2. myread(int fd, void * buf,ssize_t n)
  3. {
  4.   if(read(fd, buf, n) != n){
  5.     printf("read error\n");
  6.     return(-1);
  7.   }
  8.   return(n);
  9. }
复制代码
 楼主| 发表于 2004-3-27 22:10:35 | 显示全部楼层
最初由 libinary 发表
我不知道你到底要实现什么功能,根据你写的函数,似乎下面这个就可以:

  1. ssize_t
  2. myread(int fd, void * buf,ssize_t n)
  3. {
  4.   if(read(fd, buf, n) != n){
  5.     printf("read error\n");
  6.     return(-1);
  7.   }
  8.   return(n);
  9. }
复制代码


谢谢!!好象写得复杂了。。我的目的是想没个库函数都写个这样有出错的自定义函数。。用的时候就不需要检查错误了。。但Read()觉得太简单了。。
发表于 2004-3-29 11:36:54 | 显示全部楼层
看unp.h
里面的包裹函数错误处理做的很好啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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