С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С под Linux
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Kvinki
1 / 1 / 0
Регистрация: 21.04.2011
Сообщений: 31
1

Интерпретация командной строки. Файловые операции POSIX. Прошу помочь дописать программу

23.05.2011, 14:11. Просмотров 1163. Ответов 6
Метки нет (Все метки)

Стоит такое задание:
Написать программу, которая обеспечивает работу команды вида :
[имя_команды] [- a|- b] [- o исходный файл],
где - a и - b несовместимые флаги
- если заданный флаг - a команда отображает время в секундах, которое прошло с момента загрузки системы;
- если заданный флаг - b команда отображает число процессов, которые работают в системе;
Полученная информация также записывается в файл, имя которого задается как аргумент опции - o.
То что я смог сделать
Код
#include<unistd.h>
#include<stdio.h>
#include<fcntl.h>
#include<errno.h>
#include<string.h>
int main(int argc,char *argv[])
{
 int c; 
 int aflg=0; 
 int bflg=0; 
 int errflg=0;
 int flg='?'; 
 char *ofile=NULL; 
 opterr=0; 
if(argc!=6)
{
 (void)fprintf(stderr,"Ispolzovanie: %s: [-a | -b] [-o stroka dlya zapisi] [vxodnoi_fail]  \n",argv[0]);
 return 1;
}

 while((c=getopt(argc,argv,":abo:"))!=-1)
   {
    switch(c)
      {
       case 'a': aflg++;
      		 flg=c;
                 if(bflg)
                   { 
	        	fprintf(stderr,"Opcii a  i  b nesovmestimi \n");
	  	        errflg++;
	           }
       	         break;
       case 'b': bflg++;
      		 flg=c;
                 if(aflg)
                   { 
	        	fprintf(stderr,"Opcii a i b nesovmestimi \n");
	  	        errflg++;
	           }
       	         break;	
       case 'o': ofile=optarg;
       		 if(ofile[0]=='-')
		   {
		    fprintf(stderr,"Propushen argument opcii -%c",c);
		    errflg++;
		    }
		   
                 break; 		   
       case ':': fprintf(stderr,"Otsutstvuet argument opcii -%c\n",optopt);
                 errflg++;
		 break;
       case '?': fprintf(stderr,"Nedopustimaya opciya -%c\n",optopt);
                 errflg++;
		 break;
      }
    }
  if(errflg)
  {
   (void)fprintf(stderr,"\nIspolzovanie: %s [-a | -b] [-o stroka dlya zapisi] [vxodnoi_fail] \n",argv[0]);
   return (1);
   }
   printf("Zadanniy flag: -%c\n",flg);
   printf("Argument opcii -o: %s his size=%d\n",ofile,strlen(ofile));
printf("\n optind=%d",optind);
   printf("\nOstatok komandnoi stroki: ");
   for(;optind<argc;optind++)
     {    
      printf(" %s",argv[optind]);
     }
   printf("\n");
прошу помочь реализовать показ время в секундах и число процессов. никак не могу найти информацию и реализацию.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2011, 14:11
Ответы с готовыми решениями:

Написать программу обработки командной строки вызова программы
Написати програму, яка забезпечує роботу команди вигляду: , де -a і -b...

Прошу помочь дописать программу... в Access...
Добрый день... Горю... и болею... времени нет... Прошу помочь дописать...

Интерпретация командной строки
Добрый день всем. Дали задание Написать программу обработки командной строки...

Можете помочь дописать программу, неправильно работает.
Вариант 8 Даны целые массивы А, B и значения R и F. Каждый массив...

Прошу помочь составить программу в Visual Basic!
Прошу помочь решить хотя бы один из этих вариантов: 1. Составить...

6
g_u_e_s_t
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
23.05.2011, 15:09 2
В рамках POSIX узнать uptime и к-во процессов можно только через запуск + парсинг вывода w и ps. А так у линукса есть sysinfo (man sysinfo), у *BSD kvm (man libkvm) про остальные системы не в курсе.
0
Kvinki
1 / 1 / 0
Регистрация: 21.04.2011
Сообщений: 31
23.05.2011, 15:57  [ТС] 3
могли бы вы показать как реализовать тот же sysinfo. Материал нам недавали а выучить ипонять хочу раньше. Или если можно источник где можно почитать. Спс
0
g_u_e_s_t
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
23.05.2011, 16:13 4
Источник: man sysinfo если у вас такой страницы нет - гугл в помощь.
C
1
2
3
4
5
6
7
8
9
10
#include <sys/sysinfo.h>
#include <stdio.h>
 
int main() {
        struct sysinfo info;
 
        sysinfo(&info);
        printf("uptime: %ld\nprocs:%hu\n", info.uptime, info.procs);
        return 0;
}
1
Kvinki
1 / 1 / 0
Регистрация: 21.04.2011
Сообщений: 31
24.05.2011, 03:12  [ТС] 5
Вот код который сам смог написать. Прошу помочь исправить
Код
#include<unistd.h>
#include <sys/sysinfo.h>
#include <stdio.h>
#include <stdlib.h>
#include<fcntl.h>

int main(int argc,char *argv[])
{
 int c; 
 int aflg=0; 
 int bflg=0; 
 int errflg=0;
 int flg='?'; 
 char *ofile=NULL; 
 opterr=0; 
 while((c=getopt(argc,argv,":abo:"))!=-1)
   {
    switch(c)
      {
       case 'a': aflg++;
      		 flg=c;
                 if(bflg)
                   { 
	        	fprintf(stderr,"Opcii a i b nesovmestymy\n");
	  	        errflg++;
	           }
       	         break;
       case 'b': bflg++;
      		 flg=c;
                 if(aflg)
                   { 
	        	fprintf(stderr,"Opcii a i b nesovmestymy\n");
	  	        errflg++;
	           }
       	         break;	
       case 'o': ofile=optarg;
                 break; 		   
       case ':': fprintf(stderr,"Otsytstvyet argument opcii -%c\n",optopt);
                 errflg++;
		 break;
       case '?': fprintf(stderr,"Nedopustymaya opciya -%c\n",optopt);
                 errflg++;
		 break;
      }
    }
  if(errflg)
  {
   (void)fprintf(stderr,"Ispol'zovanie: %s: [-a | -b] [-o vihodnoy_file] \n",argv[0]);
   return (1);
   }
   printf("Zadanniy flag: %c\n",flg);
   printf("Argument opcii  o: %s\n",ofile);
   
   for(;optind<argc;optind++)
     {    
      printf(" %s",argv[optind]);
     }
   printf("\n");
  {
struct sysinfo info;
        sysinfo(&info);
		switch(flg)
		{  
		case 'a' :
            printf("uptime s zapuska OS Unix: %ld sec \n ", info.uptime);
		break;
		case 'b' :
		       printf("Kol-vo zapushenyh  process:%hu st \n ", info.procs);
	    break;
        }
  }
  int infile,bytes_written,bytes_read;
char buf[100];
infile=open(argv[optind-2],O_WRONLY|O_CREAT|O_TRUNC,0644);
bytes_written=write(infile,ofile,strlen(ofile));
close(infile);

infile=open(argv[optind-2],O_RDONLY);
bytes_read=read(infile,buf,bytes_written);
close(infile);

}
Выводит и показывает время и количество процессов но записывает в файл неверно. Знаю что что-то напутал но понять не могу. Вот скриншот:


Тоесть нужно что бы аргумент функции -o (с скриншота) это было название файла в котором и будет записываться данные или о времени или о кол-ве процессов( в зависимости от выбора). Надеюсь на помощь
0
g_u_e_s_t
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
24.05.2011, 11:45 6
А в чем проблема то?
Создаете свой ofile и пишите туда что хочется.
0
Kvinki
1 / 1 / 0
Регистрация: 21.04.2011
Сообщений: 31
24.05.2011, 17:29  [ТС] 7
Да я разобрался и сделал. Спасибо за ответы
0
24.05.2011, 17:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2011, 17:29

Прошу помочь реализовать изменение высоты строки в отчетах
В VBA ноль. Пытался найти похожее решение, и переделать под свои нужды, ничего...

Как дописать к аргументу командной строки маску файла?
Помогите пожалуйста разобраться аргументом командной строки я беру адрес...

Абрамов № 61, 85, 334(а), 374, 67(б,а). Прошу помочь, мне нужны эти задания для зачета прошу помощи.
Прошу помощи, скачайте файл Абрамов (пожалуйста), номер 61, 85, 334(а), 374,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru