Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » Помогите!!!

Ответить
Настройки темы
Помогите!!!

Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


Не могу сделать программу на С для линукса.
Нужно: Вывести на экран полной информации о пользователях спомощью команды ./bin/ls переданному как второй параметр командной строки с исползованием параметра -all передаваемого программе ./bin/ls (Необходимо использовать системный вызов execle и pid fork() ) Помогите если кто знает.

Отправлено: 00:03, 03-11-2008

 

Аватара для ruslandh

info man howto


Сообщения: 6958
Благодарности: 384

Профиль | Сайт | Отправить PM | Цитировать


Только за десяток борзых щенков

-------
Поспешай не торопясь


Отправлено: 08:45, 03-11-2008 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


Программы выглядит таким образом, проблема в другом

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include"iostream"
#include"fstream"
using namespace std;
int main(int argc,char *argv[],char *envp[])
{
if(argc>1){
if(!(strcmp(argv[1],"help"))){
if(argc==2){
(void) execle("/home/help","/home/help",argv[1],0,envp);
}
else
if(argc==3){
(void) execle("/home/help","/home/help",argv[1],argv[2],0,envp);
}
else (void) execle("/home/help","/home/help","help","-2",0,envp);
}
else{
if(argc==2){
FILE *f;
f=fopen(argv[1],"r");
if(f==NULL){
(void) execle("/home/help","/home/help","help","-1",0,envp);
}
else{
fclose(f);
int pid=fork();
if(pid==-1){
(void) execle("/home/help","/home/help","help","-4",0,envp);
}
else
if(pid==0(void)execle("/bin/ls","/bin/ls",argv[1],argv[2],0,envp);
}
}
else
(void) execle("/home/help","/home/help","help","-2",0,envp);
}
}
else (void) execle("/home/help","/home/help","help","-2",0,envp);
return 0;
}
После запуска программы на исполнение ОС загружает список команд в память, после чего процессор начинает последовательно выполнять этот список.
В начале проверяем количество параметров, если параметров <1 то выдаем ошибку, иначе проверяем второй параметр. Если второй параметр является help, то вызывается help и завершаем работу программы, иначе с помочью fopen проверяется наличие файла указанного как параметр, если файл не существует выдаем ошибку и завершаем работу программы, иначе закрываем файл, создаем новый процесс c помощью системного вызова fork

Так вот мне нужно каким то образом объяснить, что происходит дальше, так я понимаю, а объяснить не могу т.к. я с линуксом не работал вообще.

Отправлено: 17:27, 18-12-2008 | #3


Аватара для ruslandh

info man howto


Сообщения: 6958
Благодарности: 384

Профиль | Сайт | Отправить PM | Цитировать


http://www.opennet.ru/man.shtml?topic=fork&category=2

-------
Поспешай не торопясь


Отправлено: 13:12, 22-12-2008 | #4


Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата ruslandh:
http://www.opennet.ru/man.shtml?topic=fork&category=2 »
Да это я как бы читал еще и в других источниках, я просто не могу конкретно описать, что в программе идет, а определения я и так знаю.

Отправлено: 01:27, 23-12-2008 | #5



Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » Помогите!!!

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено




 
Переход