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()这个文件,再打开读就不行了。