0 / 0 / 0
Регистрация: 20.10.2016
Сообщений: 75

Проверка программы

20.03.2017, 13:28. Показов 836. Ответов 4

Студворк — интернет-сервис помощи студентам
Всем здравствуйте. Написал программу на Линукс, которая выводит на экран следующие параметры компьютера:

-Тип процессора
-Версия операционной системы
-IP адрес
-'Имя компьютера'
-Типы поддерживаемых файловых систем
-Зарегистрированные пользователи.

У самого под рукой Линукса нет, а каждый онлайн-компилятор работает по-своему.
Прошу проверить код на своём компьютере и написать, есть ли ошибки, недоработки и др.
Заранее спасибо!

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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#define _GNU_SOURCE 
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <sys/utsname.h>
#include <sys/types.h>
#include <netdb.h>
#include <ifaddrs.h>
#include <errno.h>
#include <error.h>
 
// функция оставляет от строки s только имя пользователя (до первого двоеточия)
// возвращает true, если это пользователь с номером 1000 или более
// если системный пользователь или вообще не удалось распарсить, то возвращает false
 
bool cut_name(char *s)
 
{
    int i, uid;
    char *ptr;
    char *name = strtok(s, ":");  // получаем первое слово (имя пользователя)
 
    for (i = 0; i < 2; i++) {  // получаем ещё два слова (одно пропускаем, а второе - номер пользователя)
        ptr = strtok(NULL, ":");
        if (!ptr)
            return false;
    }
    uid = atoi(ptr);  // переводим имя пользователя из строки в число
    return true;
}
 
int main()
 
{
 
  // Зарегестрированные пользователи:
 
  {
    FILE * mf=fopen ("/etc/passwd","r");
    if (!mf) {
        perror("Can not open file\n");
        return EXIT_FAILURE;
              }
    char line[1024];
    puts("Зарегестрированные пользователи:"); 
    while (fgets(line, 1024, mf)) {
        if (!cut_name(line))
            continue;
        printf("%s\n", line);
    }
    fclose(mf);
  }
 
  // Тип процессора:
   
{
    int skip_lines = 5, i = 0;
    char lines[256];
    FILE* f = fopen("/proc/cpuinfo", "r");
    for(;i<skip_lines;++i, fgets(lines, 256, f));
    puts("\nТип процессора:");
    puts(strchr(lines, ':')+2);
    fclose(f);
}
 
  // Версия ОС + Имя компьютера:
 
{
 struct utsname u;         
 uname(&u);
 printf("Версия ОС: %s\n\nИмя компьютера: %s\n", u.version, u.nodename);
}
 
  // IP-адрес:
 
 {
    struct ifaddrs *ifaces, *ifa;    
    if (getifaddrs(&ifaces))
        error(1, errno, "getifaddrs() error");
 
        // перебираем все элементы
    for (ifa = ifaces; ifa != NULL; ifa = ifa->ifa_next) {
        char host[NI_MAXHOST];
        int family = ifa->ifa_addr->sa_family;
        int size = family == AF_INET ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6);
 
                // если это не IPv4 и не IPv6, то пропускаем
        if (family != AF_INET)
            continue;
 
        printf("IP-адрес интерфейса %s:", ifa->ifa_name);
                // получаем читабельный вид IP-адреса
        if (getnameinfo(ifa->ifa_addr, size, host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST))
            error(1, errno, "getnameinfo() error");
        
        printf("%s  %s\n", (family == AF_INET) ? "" : "", host);
        printf("\n");
    }
    freeifaddrs(ifaces);  // не забываем освобождать память, которую заняли при вызове getifaddrs()
 } 
 
  // Типы поддерживаемых файловых систем:
 
{
FILE * ff=fopen ("/proc/filesystems","r");
char string [1000];
if(ff==NULL) perror("Ошибка!\n");
else
 
{
puts("\nТипы поддерживаемых файловых систем:");
if (fgets(string, 1000, ff)!=NULL)
puts(string);
fclose (ff);
}
return 0;
}
 
}
P.S. на некоторых ОС файл proc/filesystems может иметь путь etc/filesystems
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.03.2017, 13:28
Ответы с готовыми решениями:

Проверка программы
Задача заключается в том, что есть четыре светодиода, которые нужно включать и выключать в с частотой 5,8,7,6, так же имеется кнопка...

Проверка программы
ЗДРАВСТВУЙТЕ! Вот мое задание: &quot;Исходным файлом для проверки является текст программы на языке Pascal. Выполнить проверку правильности...

Проверка программы
Правильно ли я написал программу в которой надо вычислить значение функции, используя условную операцию «?:» ? ...

4
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
20.03.2017, 13:44
MalkovM, а error.h где?
0
0 / 0 / 0
Регистрация: 20.10.2016
Сообщений: 75
20.03.2017, 19:01  [ТС]
shvyrevvg, у вас error.h нет? А без него компилируется?

Добавлено через 7 минут
error.h в 12-й строке действительно не нужен. Извиняюсь.

Добавлено через 4 часа 54 минуты
Тема актуальна.
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
20.03.2017, 19:12
Цитата Сообщение от MalkovM Посмотреть сообщение
У самого под рукой Линукса нет,
VirtualBox или vmware, уже поставили бы и проверили.
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
21.03.2017, 08:45
На cygwin-е тоже работает кстати.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.03.2017, 08:45
Помогаю со студенческими работами здесь

Проверка программы
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int main() {int a; do { printf(&quot;Wybierz opcje:\n&quot;); printf(&quot;1.Opcja 1\n&quot;); ...

Проверка программы
Проверьте пожалуйста программу, не пойму, что не так. Program lab10; type TRAIN=record number:integer; destination:string; ...

Проверка программы
Здравствуйте. У кого стоит 2005-й или 2006-й Visual Studio? Проверьте плз. запускается ли эта программа.

Проверка программы
Пожалуйста, подскажите , где ошибки

Проверка программы
Не знаю как написать проверку к программе, может кто-то поможет? #include &lt;iostream&gt; int main() { float array; ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru