LinuxSir.cn,穿越时空的Linuxsir!

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

使用read()的一个例子。

[复制链接]
发表于 2003-12-6 19:50:11 | 显示全部楼层 |阅读模式
下面的程序我不是原创。
                                                                                      
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>                                                                                      
int main( void )
{
    int fd;
    int size_read;
    char buffer[80];                                                                                      
    /* Open a file for input */
    fd = open( "myfile.dat", O_RDONLY );                                                                                      
    /* Read the text */
    size_read = read( fd, buffer,
                      sizeof( buffer ) );                                                                                      
    /* Test for error */
    if( size_read == -1 ) {
        perror( "Error reading myfile.dat" );
        return EXIT_FAILURE;
    }                                                                                      
    /* Close the file */
    close( fd );                                                                                      
    return EXIT_SUCCESS;
}

sizeof()是什么意思?
请问这里的 O_RDONLY是什么意思?
请问这里的 EXIT_SUCCESS是术语吗?还是可以自己定义的?
 楼主| 发表于 2003-12-6 21:03:54 | 显示全部楼层
open64()  open()

发现有这两个相似的函数,他们有什么区别?
发表于 2003-12-6 21:25:12 | 显示全部楼层
我这里没查到open64()
sizeof()是求变量或数据类型大小的运算符,可以找一本c语言的入门书看一下
O_RDONLY是只读打开,参见 man 2 open
EXIT_SUCCESS和EXIT_FAILURE是退出码,参见 man 3 exit
 楼主| 发表于 2003-12-6 21:51:07 | 显示全部楼层
谢谢~
open64()我是在这里看到的。
http://www.qnx.com/developer/doc ... lib_ref/o/open.html

size_read = read( fd, buffer,
sizeof( buffer ) );
fd是文件句柄。 这里两次出现buffer,后面的拿80代替,第一个buffer是什么意思?
size_read好象是计算它的返回状态?
发表于 2003-12-6 21:59:36 | 显示全部楼层
mm,第一个buffer是个指针,指向保存读出的内容的空间,read返回的是读到的字节数
 楼主| 发表于 2003-12-6 22:15:24 | 显示全部楼层
谢谢~~请问fd是文件句柄吗?

第一个是是指针?这里是read特别指定的吗?就是说是它的格式。

要不是这样,前面怎么没定义呀?

前面的buffer[80]就一次搞定了:ask:ask强阿。呵呵~~~
 楼主| 发表于 2003-12-6 22:39:51 | 显示全部楼层
最初由 x11 发表
mm,第一个buffer是个指针,指向保存读出的内容的空间,read返回的是读到的字节数


read返回的是读到的字节数,不同意你这句话,read()返回的值后面怎么回判断是否是-1,好象是返回一种状态。 :p :p
发表于 2003-12-6 23:25:03 | 显示全部楼层
最初由 devel 发表
谢谢~
open64()我是在这里看到的。
http://www.qnx.com/developer/doc ... lib_ref/o/open.html

size_read = read( fd, buffer,
sizeof( buffer ) );
fd是文件句柄。 这里两次出现buffer,后面的拿80代替,第一个buffer是什么意思?
size_read好象是计算它的返回状态?

open64()是这个:
Large-file support
    These functions support 64-bit offsets.

read的三个参数是:
文件描述符:fd
缓冲区指针:buffer
缓冲区大小:sizeof(buffer) (== 80)
如果read调用失败就返回-1(一般系统调用都是失败返回-1),成功就返回读到的字节数

另:APUE是一本好书,建议看看,书名是:
《UNIX环境高级编程》(Advanced Programming in the UNIX Environment)
Richard Stevens写的,机械工业出版社出的中文版。
另外还应该找一本C语言的书看看
 楼主| 发表于 2003-12-9 13:44:59 | 显示全部楼层
谢谢两位SIR!!!

fd是文件描述符,在perl 用open是这样:open(handle,"file_name")

我估计fd和handle的作用相同,只是解释不同。
 楼主| 发表于 2003-12-11 16:06:36 | 显示全部楼层
看《UNIX环境编程》P148,有一段。
所有的I/O都是由两个系统调用完成:read()和write(),它们来自C的同名函数,对于这两个函数,第一个参数是文件描述符,第二个参数是字符数组,用做数据源或数据目标;第三个参数是要传输的字节数。

对第二个参数的解释好难理解阿。。。不知道英文版的是怎么说的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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