首页新闻找找看学习计划

linux chmod() 关闭读之后 还可以读 怎么回事?

0
悬赏园豆:5 [待解决问题]

int main(int argc, char* argv[])
{
printf("实际%d 有效%d\n", getuid(), geteuid());
int fd, n;
char buf[MAXLINE];

//打开文件
ec_neg1(fd = open("la", O_RDONLY))

//第一次读,没问题
ec_neg1(n = read(fd, buf, 2))
cout << "read1: " << n << endl;
buf[n] = '\0';
cout << buf;

//调用chmod关闭读
struct stat sta;
fstat(fd, &sta);
ec_neg1(fchmod(fd, sta.st_mode & ~S_IRUSR & ~S_IRGRP & ~S_IROTH))

//ls显示的是 --w--w---- 1 jiayith jiayith 10 11月 26 10:07 la
cout << "\n----------------\n";
system("ls -l la");
cout << "\n----------------\n";

//第二次读,读为什么可行???
ec_neg1(n = read(fd, buf, 2))
cout << "\nread2: " << n << endl;
buf[n] = '\0';
cout << buf;

exit(0);

EC_CLEANUP_BGN
cout << endl << strerror(errno);
EC_CLEANUP_END
}

-------------------------------------------------------------------

显示:

jiayith@jiayith:~/tb$ ./a

实际1000 有效1000
read1: 2
wo
----------------
--w--w---- 1 jiayith jiayith 10 11月 26 10:07 la

----------------

read2: 2

sh

--------------------------------------------------

我的理解:

第一次读没问题

第二次读之前用chmod()关闭了读的权限,并且也不是超级用户,为什么第二次还可以读?

我试了一下在第二次读之前close()这个文件,再打开读就不行了。

简单的信仰的主页 简单的信仰 | 初学一级 | 园豆:3
提问于:2014-11-26 10:17
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册