Привет, все, что я хотел, чтобы иметь возможность устанавливать разрешения для сокетов unix для проекта, который я разрабатываю, я не мог найти «хороший» способ сделать это, написав это небольшое пространство имен, оно кажется довольно эффективным, поэтому я решил опубликоватьздесь, посмотрите, что все, хотя, и если есть что-то, что я мог бы улучшить.
Также для публичных мест, если кто-то еще ищет что-то, чтобы сделать это:)
Вы можете использовать это решение, чтобы установитьправа доступа к файлам в файловой системе Unix, например:
UnixFileInfo UnixFilePermission = new Mono.Unix.UnixFileInfo(@"/somepath");
UnixFilePermission.FileAccessPermissions = new PermGrid().ConvertPerm(644);
А вот пространство имен само по себе
using System;
using Mono.Unix;
using UnixTools;
namespace UnixTools
{
public class PermGrid
{
private static readonly FileAccessPermissions[,] PermissionGrid = new FileAccessPermissions[3, 8] {
{
0x00,
FileAccessPermissions.UserExecute,
FileAccessPermissions.UserRead,
FileAccessPermissions.UserExecute | FileAccessPermissions.UserRead,
FileAccessPermissions.UserWrite,
FileAccessPermissions.UserWrite | FileAccessPermissions.UserExecute,
FileAccessPermissions.UserWrite | FileAccessPermissions.UserRead,
FileAccessPermissions.UserReadWriteExecute
},
{
0x00,
FileAccessPermissions.GroupExecute,
FileAccessPermissions.GroupRead,
FileAccessPermissions.GroupExecute | FileAccessPermissions.GroupRead,
FileAccessPermissions.GroupWrite,
FileAccessPermissions.GroupWrite | FileAccessPermissions.GroupExecute,
FileAccessPermissions.GroupWrite | FileAccessPermissions.GroupRead,
FileAccessPermissions.GroupReadWriteExecute
},
{
0x00,
FileAccessPermissions.OtherExecute,
FileAccessPermissions.OtherRead,
FileAccessPermissions.OtherExecute | FileAccessPermissions.OtherRead,
FileAccessPermissions.OtherWrite,
FileAccessPermissions.OtherWrite | FileAccessPermissions.OtherExecute,
FileAccessPermissions.OtherWrite | FileAccessPermissions.OtherRead,
FileAccessPermissions.OtherReadWriteExecute
},
};
public FileAccessPermissions ConvertPerm(int UnixPerm)
{
return ConvertPerm(UnixPerm.ToString());
}
public FileAccessPermissions ConvertPerm(String UnixPerm)
{
Int16 PermissionSegment = 0;
Int16[] PermissionSegmentGroup = new Int16[3] { 0, 0, 0 };
foreach (Char PermInt in UnixPerm)
{
PermissionSegmentGroup[PermissionSegment] = Convert.ToInt16(PermInt.ToString());
PermissionSegment++;
}
return ConvertPerm(PermissionSegmentGroup);
}
public FileAccessPermissions ConvertPerm(Int16[] UnixPerm)
{
FileAccessPermissions PermStore = new FileAccessPermissions();
PermStore = PermissionGrid[0, UnixPerm[0]] | PermissionGrid[1, UnixPerm[1]] | PermissionGrid[2, UnixPerm[2]];
return PermStore;
}
}
}