LinuxSir.cn,穿越时空的Linuxsir!

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

关于文件的读写

[复制链接]
发表于 2006-4-3 16:48:16 | 显示全部楼层 |阅读模式
我不知道文件的读写函数,就是write和read具体在哪个地方定义的?
在fs.h中只是声明了下,可是在哪做的具体定义的?
发表于 2006-4-3 16:55:31 | 显示全部楼层
in glibc

btw: if you want to read the code, you may download glibc source
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-3 17:04:29 | 显示全部楼层
ssize_t (*write) (struct file *, const char *, size_t, loff_t *);
就是这个函数,我不知道里面的第二个参数和第四个参数的意义,再一个它的操作流程是怎么回事?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-3 17:04:49 | 显示全部楼层
ssize_t (*write) (struct file *, const char *, size_t, loff_t *);
就是这个函数,我不知道里面的第二个参数和第四个参数的意义,再一个它的操作流程是怎么回事?
回复 支持 反对

使用道具 举报

发表于 2006-4-3 17:14:43 | 显示全部楼层
where did you find such a function pointer declaration?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-3 17:30:36 | 显示全部楼层
/usr/src/linux-2.4/include/linux/fs.h中找到的
回复 支持 反对

使用道具 举报

发表于 2006-4-3 18:04:21 | 显示全部楼层
果然是内核里面的东西,其实第二个和第四个参数的意义还是很明显的,第二个参数是要写入文件的缓冲数据,第四个参数是要写入文件的偏移量。
如果想知道具体流程,请参考相关源码: /usr/src/linux-2.4/mm/filemap.c 的 ssize_t generic_file_write(struct file *file, const char __user *buf,size_t count, loff_t *ppos) 函数
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-3 20:37:49 | 显示全部楼层
那第一个参数表示源目标文件,就是将要写入的内容,第三个参数是写入的长度(大小)?
我说的是正确的嘛?那要是想将这些数据在写入前加密,应该怎么做呢?
比如利用DES加密算法,该怎么做,其函数为:
char Des_Go(char *Out, char *In, long datalen, const char *Key, int keylen, char c)
{
    long i,j;
    char Type1=c,Type2;
    if(Type1=='E')
                 Type2='D';
    else
                 Type2='E';
         /*SetKey(Key, keylen);*/
        if( !Is3DES ) {   /* 1次DES */
                for( i=0,j=datalen>>3; i<j; ++i,Out+=8,In+=8)
                        DES(Out, In, &SubKey[0], Type1);
        } else{   /* 3次DES 加密:加(key0)-解(key1)-加(key0) 解密::解(key0)-加(key1)-解(key0)*/
                for( i=0,j=datalen>>3; i<j; ++i,Out+=8,In+=8) {
                        DES(Out, In,  &SubKey[0], Type1);
                        DES(Out, Out, &SubKey[1], Type2);
                        DES(Out, Out, &SubKey[0], Type1);
                }
        }
        return 1;
}
应该怎么调用呢?
回复 支持 反对

使用道具 举报

发表于 2006-4-3 22:29:57 | 显示全部楼层
你想在内核里面做?
有两个办法可以达到你的要求:
1. 可以考虑修改相应 *_file_operations(比如 ext3_file_operations) 中的 write 指针,使其指向自己写的函数,处理完后,再调用原来的write函数
2. 修改那个write函数,在里面先调用你的函数,再调用以前的write函数
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-4 08:46:14 | 显示全部楼层
那个write函数是调用系统内头文件中的函数啊,不好修改
我的想法是先将其加密了,然后再读进磁盘中去,或者是读进去以后再加密。而不必要修改write函数,现在只要知道存放数据的物理地址和长度就可以做,但是我却对这个write函数里面的参数不是很了解了,所以就有点麻了,呵呵
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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