Сайт | Скачать | Видео | Wiki

Автор Тема: "C"  (Прочитано 18581 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
"C"
« : 16 Январь 2016, 14:44:41 »
 Первый опыт написать программу на "C"
Код
//ls_net. DdShurick GPL v2 16.01.16
#include <string.h>
#include <stdio.h>
#include <dirent.h>

char *netdir="/sys/class/net";
DIR *dip;
struct dirent *dit;
FILE *fp;
char buf1[16];
char operstate[8];

main()
{
dip=opendir(netdir);
if (dip==NULL) return 1;

while ((dit = readdir(dip)) != NULL)
{
if (strcmp(dit->d_name,".")!=0 && strcmp(dit->d_name,"..")!=0 && strcmp(dit->d_name,"lo")!=0 )
{
buf1[0]=0;
strcat(buf1,netdir);
strcat(buf1,"/");
strcat(buf1,dit->d_name);
strcat(buf1,"/operstate");
printf(dit->d_name);
    printf("\t");
fp=fopen(buf1,"r");
while (fgets (operstate, 8, fp) != NULL)
printf(operstate);
fclose(fp);
}
}
    closedir(dip);
}
Показывает сетевые интерфейсы и их состояние "up/down"
Код
bash-4.3# ./ls_net     
wlan0 down
eth0 up
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн ander

  • Активный участник
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +16/-0
Re:"C"
« Ответ #1 : 16 Январь 2016, 18:01:44 »
О как!  А я, глядя на скрипты, думал, вы старый программист.  :)

По программе.  Поскольку в C любое ненулевое значение считается истиной, то все "!=0" и "!=NULL" можно просто не писать.
То есть вместо while ((dit = readdir(dip)) != NULL) и if (strcmp(dit->d_name,".")!=0 && strcmp(dit->d_name,"..")!=0 && strcmp(dit->d_name,"lo")!=0 )
писать просто while (dit = readdir(dip)) и if (strcmp(dit->d_name,".") && strcmp(dit->d_name,"..") && strcmp(dit->d_name,"lo") )

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Re:"C"
« Ответ #2 : 16 Январь 2016, 18:27:54 »
А я, глядя на скрипты, думал, вы старый программист.  :)
Нет, я просто старый  :(
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн nady

  • Новичок
  • *
  • Сообщений: 15
  • Репутация: +0/-0
Re:"C"
« Ответ #3 : 16 Январь 2016, 18:29:29 »
програмка читает файлики "operstate" в соответствующих каталогах "sys/class/net" ?
правильно я понимаю?
то же изучаю Си
« Последнее редактирование: 16 Январь 2016, 18:31:06 от nady »

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Re:"C"
« Ответ #4 : 16 Январь 2016, 18:52:13 »
 Да.
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
    • PuppyRus-A
Re:"C"
« Ответ #5 : 17 Январь 2016, 08:52:16 »
Цель темы - совместное изучение С или на выходе планируется какая-то прога?

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Re:"C"
« Ответ #6 : 17 Январь 2016, 09:17:11 »
 Всё придумано до нас, поэтому изучение и подпиливание.
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
    • PuppyRus-A
Re:"C"
« Ответ #7 : 17 Январь 2016, 09:44:33 »
Если подпиливание (или написание) интересно было бы знать чего именно.... Есть на форуме матерые Сишники?

Оффлайн neobht

  • Ветеран
  • *****
  • Сообщений: 1031
  • Репутация: +15/-0
Re:"C"
« Ответ #8 : 17 Январь 2016, 10:31:55 »
Если подпиливание (или написание) интересно было бы знать чего именно.... Есть на форуме матерые Сишники?

матерые - это те, кто на бумажке может писать программы без ошибок и знает кучу библиотек по памяти определение каждой функции в них. :)

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Re:"C"
« Ответ #9 : 17 Январь 2016, 11:01:58 »
интересно было бы знать чего именно....
А что надо?
Есть на форуме матерые Сишники?
Нет. Своих растить надо.
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
    • PuppyRus-A
Re:"C"
« Ответ #10 : 17 Январь 2016, 11:13:45 »
Надо:
аналог xfce-notifyd и appfinder без xfce либ
desktop-drive-icon пофиксить
текст к иконкам apwall приделать

Матерые - это у которых есть проги которые хоть кто-нибудь юзает
Если сам не умеешь - как растить других?
« Последнее редактирование: 17 Январь 2016, 12:31:19 от sfs »

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Re:"C"
« Ответ #11 : 17 Январь 2016, 12:08:45 »
Если сам не умеешь - как растить других?
Расти над самим собой.

добыл исходники network_tray от B.K. Можно подпилить.
Надо:
аналог xfce-notifyd и appfinder без xfce либ
desktop-drive-icon пофиксить
текст с иконкам apwall приделать
Это всё из PRA?
« Последнее редактирование: 17 Январь 2016, 12:19:00 от DdShurick »
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
    • PuppyRus-A
Re:"C"
« Ответ #12 : 17 Январь 2016, 12:31:04 »
desktop-drive-icon - в ПРА проблема есть с сохраненкой в папку. В других дистрах - не знаю
Остальное - общелинуксовое

Оффлайн paulus

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 1732
  • Репутация: +24/-0
Re:"C"
« Ответ #13 : 24 Февраль 2016, 05:30:08 »
desktop-drive-icon - в ПРА проблема есть с сохраненкой в папку. В других дистрах - не знаю
Монтирует диск на котором находится (с changes) /mnt/live/memory/changes, а должен открывать при нажатии на ярлык /dev/sda2 (в моем случае) - жутко не удобно.

gatotray вроде тоже на Си, нет ли желания добавить функционал trayXload (мониторинг загрузки Х сервера)? Была бы замена для pra/pra64...
« Последнее редактирование: 03 Март 2016, 20:20:33 от paulus »

Оффлайн dmitrywrk

  • Новичок
  • *
  • Сообщений: 2
  • Репутация: +0/-0
Re: "C"
« Ответ #14 : 04 Июнь 2016, 11:34:05 »
По теме и не совсем: изучаю Си самостоятельно, для написания программ и, в конечном итоге, портирования linux  на spmp8000 (китайские клоны psp. До меня это уже сделали, но результат я так и не видел, и, к сожалению, вряд ли увижу. История долгая, разработчик сделал все, но забросил проект, разобраться надо). Программист (я) в самом зачаточном состоянии: простой сортировщик для рендеринга шрифта с созданием тестового массива :
#include <stdio.h>

int createarray (int *array, int data, int propperties)
{
   unsigned int i;
   for (i = 0; i < data; i+=propperties){
      *(array+i) = i+propperties;
   };
   return 0;
}

void prt_arr(int *array, int lenth, char *arrayname)
{
   unsigned int count;   
   for (count = 0; count < lenth; count++){
      printf ("%s=%d ", arrayname, *(array+count));
   };
}

void copydata (int *data, int *resdata, int lenth)
{
   int i;
   for (i = 0; i < lenth; i++){
      *(resdata+i) = *(data+i);
      //printf ("b=%d ", prt);
   };
}


int main (void) {
//входные данные,    
   int id = 8, x = 2, y = 3 , n = 4 , prop = 1; //symbol id's, weight symbol, heght, n-symbols count per string, proper - byte per pixel
//производные. все производные следует умножать на коэф prop.
   int string_count = id/n;   
   x = x*prop;//or y=y*prop
//determine constant      
   int id_data = x*y;
   int shift_to_y = x*n;
   int string_data = x*n*y;
   int alldata = id*id_data;   
//determine shift and position inside arrays
//   int pos_out0 = 0;//start position

   int a[alldata], b[alldata];
////////////////////////////////////////////////////////////////////////////////////
   int pos_in = 0, pos_out = 0;//current positoin inside "in" array and "out"
   int shift_in, shift_out;//shift to next data

   int i,arr_id, stringshift;//just counts

   printf ("array created %s\n", ( (createarray (&a[0], alldata, prop))?"with error":"without errors"));
   prt_arr(&a[0], alldata, "a");
   printf ("\nid=%d, x=%d, y=%d, n=%d, alldata=%d, strings:%d\n", id,x,y,n,alldata, string_count);
//////////// programm for sorting /////////////////////////////////////////////////////////////
   for (arr_id = 0; arr_id < id; arr_id++){
      stringshift = (arr_id/n)*string_data;
      shift_in = stringshift+x*(arr_id%n);
      shift_out = id_data*arr_id;      
      
      for (i = 0; i < y; i++){
         
         pos_in = shift_in+i*shift_to_y;
         pos_out = i*x + shift_out;
         copydata (&a[pos_in],&b[pos_out],x);

         //printf (" in=%d, out=%d ", pos_in, pos_out);
      };
   //printf ("\n");
   };
//////////////////////////////////////////////////////////////////////////////////////////////////
   printf ("array rebuilded: ");
   prt_arr(&b[0], alldata, "b");
   printf ("\n");   

   return 0;
}
Готов навязаться в любой проект с разбором "полетов"  :laugh: А вопрос у меня такой: нужна компактная среда для кросскомпиляции под armv5 (arm926ej-s).Puppylinux очень компактная ОС, было бы классно. Про установку gcc под дистрибутив читал, но для сборки arm-eabi (gcc + newlib) + xwidget (простейший ide с поддержкой GDB, сейчас для меня просто слова) требует кучу зависимостей: gettexinfo, bison, ncurses и т.д. Может кто-нибудь слышал о готовом решении!? сейчас под UBUNTU сижу... Как следствие второй вопрос кто какую IDE пользует, что можете посоветовать, скрипты сборки для make (на хабре есть замечательная статья про универсальный Makefile) .В качестве IDE предлагаю code blocks, но не рекомендую :-) Фу-у-у-ух, пока все :-)
« Последнее редактирование: 04 Июнь 2016, 12:07:41 от dmitrywrk »