日期:2014-05-16  浏览次数:20849 次

小妹儿向大家请教个问题--谢谢
To ALL
我用ioctl 修改文件的属性。代码如下:
#include <fcntl.h>
#include<sys/ioctl.h>
#include<linux/fs.h>
#include <errno.h>
#include <sys/vfs.h>
#include<stdio.h>
#include<stdlib.h>
#include <iostream>
using namespace std;

char* diskname="/home/biz/TEST/aa";

int main()
{
int fd = open(diskname,O_RDONLY);
if(-1 == fd)
{
   perror("open");
   return 0;
}
else
{ //FS_COMPRBLK_FL //FS_COMPR_FL
    if(ioctl(fd,FS_IOC_SETFLAGS,FS_COMPR_FL) >= 0) {
            cout<<"succes"<<endl;
    }
    else {
        perror("ioctl");
    }
}

return 0;
}

输出有错误:ioctl: Bad address 
请大家帮忙看看谢谢
linux?ioctl

------解决方案--------------------
引用:
Quote: 引用:

可以使用 chmod 

http://linux.chinaunix.net/techdoc/system/2009/07/04/1121929.shtml

哥哥:chmod 只能修改 读 写 执行 三种权限。
我要的是 chattr +e 文件名。修改文件属性。并且通过strace chattr 发现调用系统的ioctl(fd,FS_IOC_SETFLAGS,XXX,) 但是第三个参数XXX 我就不知道设定什么了? 通过内核代码好像是FS_COMPR_FL。但是 出现了 

输出有错误:ioctl: Bad address 

有什么好的建议吗?谢谢。
这就不清楚了,看看有么有 chattr 函数