我正在研究一个进程,允许用户允许或不允许其他人向他们的终端写入数据下面是我所拥有的,但似乎没有工作,我不知道为什么。如果有人能指点我正确的方向,我将不胜感激。

#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;

&S_IWOTH一起使用将清除所有不S_IWOTH的位,如果尚未设置,则该位也将保留为零。
您可以运行tty(1)来获取终端的文件名,并在其上运行ls -l来顺便查看权限,以防您还不知道。别忘了组权限可能也很重要。
最好也检查fchmod(2)的返回值。

10-05 22:58
查看更多