红联Linux门户
Linux帮助

求助!read函数出错!

发布时间:2010-01-11 14:48:39来源:红联作者:zombie126
源代码:
#include
#include
#include
#include
#include
int main()
{
int fd1;
char buffer[100];
int num,i;
if(fd1=open("test1.dat",O_RDONLY)==-1){
perror("Cannot open the test1 file");
return 1;
}
while((num=read(fd1,&buffer,10))>0){
printf("%s",buffer);
}
close(fd1);
return 0;
}
编译的时候没有错误,执行的时候就不动了!如下图
PICTURE:/root/.tencent/qq//AppData/file//sendpix0.jpg
调试的时候出现错误信息:missing separate debuginfos use debuginfo-install glibc.i686!
望大虾帮助阿!谢谢了!
文章评论

共有 5 条评论

  1. anabrian 于 2010-01-20 14:57:13发表:

    引用:
    read的第二个参数应该是buffer吧,还有要想调试的话,编译时得加上-g选项。别的没看出来,重装系统后没装Ubuntu
    ubuntulover 发表于 2010-1-11 15:28


    下面是函数的说明:
    read(由已打开的文件读取数据)
    相关函数 readdir,write,fcntl,close,lseek,readlink,fread

    表头文件 #include

    定义函数 ssize_t read(int fd,void * buf ,size_t count);

    函数说明 read()会把参数fd 所指的文件传送count个字节到buf指针所指的内存中。若参数count为0,则read()不会有作用并返回0。返回值为实际读取到的字节数,如果返回0,表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动。

    附加说明 如果顺利read()会返回实际读到的字节数,最好能将返回值与参数count 作比较,若返回的字节数比要求读取的字节数少,则有可能读到了文件尾、从管道(pipe)或终端机读取,或者是read()被信号中断了读取动作。当有错误发生时则返回-1,错误代码存入errno中,而文件读写位置则无法预期。

    错误代码 EINTR 此调用被信号所中断。
    EAGAIN 当使用不可阻断I/O 时(O_NONBLOCK),若无数据可读取则返回此值。
    EBADF 参数fd 非有效的文件描述词,或该文件已关闭。

    所以,程序中调用时应该用buffer而不是&buffer!

  2. two__fishes 于 2010-01-12 16:33:04发表:

    [i=s] 本帖最后由 two__fishes 于 2010-1-12 16:41 编辑 [/i]

    最好把文件路径加上,此外read()执行一次是不是往下一条读没深究过,如果没有的话那就死循环的读第一条。
    平时工作中一般用指针和fget()

  3. ubuntulover 于 2010-01-11 15:28:02发表:

    read的第二个参数应该是buffer吧,还有要想调试的话,编译时得加上-g选项。别的没看出来,重装系统后没装Ubuntu

  4. zombie126 于 2010-01-11 15:10:07发表:

    鼎鼎定,哪位帮忙一下阿

  5. zombie126 于 2010-01-11 14:52:56发表:

    自己顶!