切换其他人写入您的终端的权限的过程 [Unix] [C]
Process that toggles other's permission to write to your terminal [Unix] [C]
我正在研究一个让用户允许或禁止其他人写入他们的终端的过程。以下是我所拥有的,但它似乎没有用,我不确定为什么。如果有人能指出我正确的方向,我将不胜感激。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
main( int ac, char *av[] ){
struct stat settings;
int perms;
if ( fstat(0, &settings) == -1 ){
perror("Cannot stat stdin");
exit(0);
}
perms = (settings.st_mode & 07777);
if ( ac == 1 ){
printf("Other's write is %s\n", (perms & S_IWOTH)?"On":"Off");
exit(0);
}
if ( ac == 2 && av[1][0] == 'n' )
perms &= ~S_IWOTH;
else
perms &= S_IWOTH;
fchmod(0, perms);
return 0;
}
你可能是故意的
perms |= S_IWOTH;
而不是
perms &= S_IWOTH;
&
'ing with S_IWOTH
将清除所有不是 S_IWOTH
的位,如果该位尚未设置,也会将该位保留为零。
您可以 运行 tty(1)
获取终端的文件名,然后 运行 ls -l
顺便查看权限,以防万一你还不知道。不要忘记组权限可能也很重要。
最好也检查 fchmod(2)
的 return 值。
我正在研究一个让用户允许或禁止其他人写入他们的终端的过程。以下是我所拥有的,但它似乎没有用,我不确定为什么。如果有人能指出我正确的方向,我将不胜感激。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
main( int ac, char *av[] ){
struct stat settings;
int perms;
if ( fstat(0, &settings) == -1 ){
perror("Cannot stat stdin");
exit(0);
}
perms = (settings.st_mode & 07777);
if ( ac == 1 ){
printf("Other's write is %s\n", (perms & S_IWOTH)?"On":"Off");
exit(0);
}
if ( ac == 2 && av[1][0] == 'n' )
perms &= ~S_IWOTH;
else
perms &= S_IWOTH;
fchmod(0, perms);
return 0;
}
你可能是故意的
perms |= S_IWOTH;
而不是
perms &= S_IWOTH;
&
'ing with S_IWOTH
将清除所有不是 S_IWOTH
的位,如果该位尚未设置,也会将该位保留为零。
您可以 运行 tty(1)
获取终端的文件名,然后 运行 ls -l
顺便查看权限,以防万一你还不知道。不要忘记组权限可能也很重要。
最好也检查 fchmod(2)
的 return 值。