C 在linux中创建文件时选择BSD或sys5样式

C 在linux中创建文件时选择BSD或sys5样式,c,linux,filesystems,bsd,systems-programming,C,Linux,Filesystems,Bsd,Systems Programming,当我在linux中创建文件时,默认组所有者成为创建文件的进程的gid。若我将SGID添加到父目录,则该文件将继承父目录所有者组。此外,我还可以更改fs装载选项,使其行为类似于sys5或BSD 如果我不考虑目录权限和fs装载选项而选择此选项,该怎么办?是否有c函数选项或syscall参数允许您选择组所有者 $ find . -ls 262 4 drwxrwxr-x 4 devops devops 4096 Apr 24 18:01 . 999 4

当我在linux中创建文件时,默认组所有者成为创建文件的进程的gid。若我将SGID添加到父目录,则该文件将继承父目录所有者组。此外,我还可以更改fs装载选项,使其行为类似于sys5或BSD

如果我不考虑目录权限和fs装载选项而选择此选项,该怎么办?是否有c函数选项或syscall参数允许您选择组所有者

$ find . -ls
   262    4 drwxrwxr-x   4 devops   devops       4096 Apr 24 18:01 .    
   999    4 drwxrwxr-x   2 devops   root         4096 Apr 24 18:03 ./dir1
  6093    4 drwxrwsr-x   2 devops   root         4096 Apr 24 18:03 ./dir2
$ touch dir1/file dir2/file
$ find . -ls
   262    4 drwxrwxr-x   4 devops   devops       4096 Apr 24 18:01 .
   999    4 drwxrwxr-x   2 devops   root         4096 Apr 24 18:04 ./dir1
  5576    0 -rw-rw-r--   1 devops   devops          0 Apr 24 18:04 ./dir1/file
  6093    4 drwxrwsr-x   2 devops   root         4096 Apr 24 18:04 ./dir2
  6094    0 -rw-rw-r--   1 devops   root            0 Apr 24 18:04 ./dir2/file
$ 
我希望有这样的东西:

$ mytouch -s BSD  dir1/file1
$ mytouch -s sys5 dir1/file2
$ find dir1 -ls
   999    4 drwxrwxr-x   2 devops   root         4096 Apr 24 18:10 dir1
  6213    0 -rw-rw-r--   1 devops   root            0 Apr 24 18:10 dir1/file1
  6214    0 -rw-rw-r--   1 devops   devops          0 Apr 24 18:10 dir1/file2
$ 

很可能,你不能

粘性位的实现完全存在于内核中,没有控制其操作方式的
open()
create()
选项


您的程序可以调用
chown()
,在创建文件组后手动重置文件组。但是,只有当您的进程以root用户身份运行,或者作为拥有父目录的组的成员运行时,这才可以可靠地工作。

很可能您不能

粘性位的实现完全存在于内核中,没有控制其操作方式的
open()
create()
选项


您的程序可以调用
chown()
,在创建文件组后手动重置文件组。但是,只有当您的进程以root用户身份运行,或者作为拥有父目录的组的成员运行时,此操作才能可靠地工作。

请输入代码。背景很重要。如果您真的关心权限,
chown()
chmod()
与他们的命令行好友做同样的事情。依赖于粘性的东西真的很难,我强烈反对。请输入代码。背景很重要。如果您真的关心权限,
chown()
chmod()
与他们的命令行好友做同样的事情。依靠黏糊糊的东西真的很烦人,我强烈反对这样做。