Форум программистов, компьютерный форум CyberForum.ru

Аналог команды chmod - C++

Восстановить пароль Регистрация
 
CryNet
0 / 0 / 1
Регистрация: 13.04.2011
Сообщений: 78
Записей в блоге: 1
10.06.2012, 16:38     Аналог команды chmod #1
возможно ли создать аналогичную программу для изменения доступа? вот я пытался, но у меня не особо получилось.. надо чтобы цифры считывал и устанавливал права а получилось только на да и нет.. как переоранизовать чтобы писать после имени файла цифры и считывать их и по ним ставить права?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdlib.h>
#include <fcntl.h>
 
#define ANSWER_SIZE 256
 
void add_mode (mode_t * mode, const char* answer, mode_t bit)
{
    if(answer[0]=='y')
    {
        *mode |=bit;
    printf("set\n");
        } else printf("not set\n");
}
 
int main(int argc, char ** argv)
{
    char* answer;
    mode_t mode = 0000;
 
    if(argc<2)
    {
    printf("%s","Too few arguments\n");
    return 1;
    }
 
answer = (char *) malloc (sizeof (char) * ANSWER_SIZE);
if (answer == NULL)
{
    printf("%s", "*malloc() error\n");
        return 1;
}
 
printf("User can read: ");
printf("\nPress y for YES and other for NO\n");
scanf("%s", answer);
add_mode (&mode, answer, S_IRUSR);
 
 
 
printf("User can write: ");
printf("\nPress y for YES and other for NO\n");
scanf("%s", answer);
add_mode(&mode, answer, S_IWUSR);
 
printf("User can execute: ");
printf("\nPress y for YES and other for NO\n");
scanf("%s", answer);
add_mode(&mode, answer, S_IXUSR);
 
printf("Group can read: ");
printf("\nPress y for YES and other for NO\n");
scanf("%s", answer);
add_mode(&mode, answer, S_IRGRP);
 
printf("Group can write: ");
printf("\nPress y for YES and other for NO\n");
scanf("%s", answer);
add_mode(&mode, answer, S_IWGRP);
 
printf("Group can execute: ");
printf("\nPress y for YES and other for NO\n");
scanf("%s", answer);
add_mode(&mode, answer, S_IXGRP);
 
 
printf("World can read: ");
printf("\nPress y for YES and other for NO\n");
scanf("%s", answer);
add_mode(&mode, answer, S_IROTH);
 
printf("World can write: ");
printf("\nPress y for YES and other for NO\n");
scanf("%s", answer);
add_mode(&mode, answer, S_IWOTH);
 
printf("World can execute: ");
printf("\nPress y for YES and other for NO\n");
scanf("%s", answer);
add_mode(&mode, answer, S_IXOTH);
 
printf("SUID: ");
printf("\nPress y for YES and other for NO\n");
scanf("%s", answer);
add_mode(&mode, answer, S_ISUID);
 
printf("SGID: ");
printf("\nPress y for YES and other for NO\n");
scanf("%s", answer);
add_mode(&mode, answer, S_ISGID);
 
printf("Sticky: ");
printf("\nPress y for YES and other for NO\n");
scanf("%s", answer);
add_mode(&mode, answer, S_ISVTX);
 
if (chmod(argv[1], mode) == -1 )
{
printf("%s", "chmod() error\n");
return 1;
}
free (answer);
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2012, 16:38     Аналог команды chmod
Посмотрите здесь:

Команды C++ C++
C++ Цепочечные команды
Экранирование команды C++
C++ Команды с++
Консольные команды C++
В массиве записаны результаты N игр футбольной команды. Определить количество выигрышей, количество проигрышей и количество ничьих данной команды. C++
Команды error и if C++
C++ AT-команды 3G модему

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
10.06.2012, 16:59     Аналог команды chmod #2
Можно посмотреть, как реализован стандаврный chmod
Bash
1
2
3
4
5
mkdir coreutils
cd coreutils
apt-get source coreutils
cd coreutils*/src
vim chmod.c
CryNet
0 / 0 / 1
Регистрация: 13.04.2011
Сообщений: 78
Записей в блоге: 1
10.06.2012, 17:34  [ТС]     Аналог команды chmod #3
Цитата Сообщение от soon Посмотреть сообщение
Можно посмотреть, как реализован стандаврный chmod
Bash
1
2
3
4
5
mkdir coreutils
cd coreutils
apt-get source coreutils
cd coreutils*/src
vim chmod.c
кроме одного кода ниже не нашел ничего полезного.. даже перекомпилить не удается

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 while ((c = getopt_long (argc, argv,
                           "Rcfvr::w::x::X::s::t::u::g::o::a::,::+::=::",
                           long_options, NULL))
         != -1)
    {
      switch (c)
        {
        case 'r':
        case 'w':
        case 'x':
        case 'X':
        case 's':
        case 't':
        case 'u':
        case 'g':
        case 'o':
        case 'a':
        case ',':
        case '+':
        case '=':
          /* Support nonportable uses like "chmodfate -w", but diagnose
             surprises due to umask confusion.  Even though "--", "--r",
             etc., are valid modes, there is no "case '-'" here since
             getopt_long reserves leading "--" for long options.  */
          {
            /* Allocate a mode string (e.g., "-rwx") by concatenating
               the argument containing this option.  If a previous mode
               string was given, concatenate the previous string, a
               comma, and the new string (e.g., "-s,-rwx").  */
 
            char const *arg = argv[optind - 1];
            size_t arg_len = strlen (arg);
            size_t mode_comma_len = mode_len + !!mode_len;
            size_t new_mode_len = mode_comma_len + arg_len;
            if (mode_alloc <= new_mode_len)
              {
                mode_alloc = new_mode_len + 1;
                mode = X2REALLOC (mode, &mode_alloc);
              }
            mode[mode_len] = ',';
            strcpy (mode + mode_comma_len, arg);
            mode_len = new_mode_len;
 
            diagnose_surprises = true;
          }
          break;
Yandex
Объявления
10.06.2012, 17:34     Аналог команды chmod
Ответ Создать тему
Опции темы

Текущее время: 13:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru