#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!
望大虾帮助阿!谢谢了!
anabrian 于 2010-01-20 14:57:13发表:
下面是函数的说明:
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!
two__fishes 于 2010-01-12 16:33:04发表:
[i=s] 本帖最后由 two__fishes 于 2010-1-12 16:41 编辑 [/i]
最好把文件路径加上,此外read()执行一次是不是往下一条读没深究过,如果没有的话那就死循环的读第一条。
平时工作中一般用指针和fget()
ubuntulover 于 2010-01-11 15:28:02发表:
read的第二个参数应该是buffer吧,还有要想调试的话,编译时得加上-g选项。别的没看出来,重装系统后没装Ubuntu
zombie126 于 2010-01-11 15:10:07发表:
鼎鼎定,哪位帮忙一下阿
zombie126 于 2010-01-11 14:52:56发表:
自己顶!