Автор: Skyer1
Дата сообщения: 18.12.2008 16:48
Может не туда пишу, но суть проблеммы в следующем есть программа на Линуксе написанная на С
#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;
}
Дальше идет описание программы, так вот мне нужно поподробнее описание, а точнее, что делают и куда возвращают значения fork и execle я с линуксом не работал, поэтому не могу понять.
После запуска программы на исполнение ОС загружает список команд в память, после чего процессор начинает последовательно выполнять этот список.
В начале проверяем количество параметров, если параметров <1 то выдаем ошибку, иначе проверяем второй параметр. Если второй параметр является help, то вызывается help и завершаем работу программы, иначе с помочью fopen проверяется наличие файла указанного как параметр, если файл не существует выдаем ошибку и завершаем работу программы, иначе закрываем файл, создаем новый процесс c помочью системного вызова fork