Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2012, 23:37   #1
Демик
Форумчанин
 
Аватар для Демик
 
Регистрация: 30.01.2011
Сообщений: 231
По умолчанию C | Lunix | Дочерний процесс

Привет. Задали тут написать программу( в принципе я её написал = ) ), но в ней я использовал дочерние процессы, и они вроде как работаю, собственно в чем проблема, мне нужно что бы один и тот же дочерний процесс выполнялся два раза, до определённых действий и после них, но вся проблема в том, что по факту этот процесс (который дочерний) выполняется два раза уже после всех действий. Подскажите, как мне сделать то что я хочу? = )
Вот мой код:
Код:
/* 4 Написать программу, которая:
создает новый каталог в текущем каталоге;
записывает в него различные элементы;
осуществляет печать содержимого каталога, определяя тип каждого элемента;
удаляет и переименовывает отдельные элементы каталога и снова распечатывает его содержимое;
Создать элементы: 2 файла, 2 символических ссылки, 2 подкаталога; переименовать оба файла;
удалить по одному элементу.*/
#include <fcntl.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/sendfile.h>
#include <errno.h>
#include <termios.h>
#include <unistd.h>
#include <sys/types.h>
#include <dirent.h>
#include <sys/wait.h>


int main (int argc, char* argv[]){
int mode_dir = 0760;
int mode_file = 0760;

mkdir ( "/home/demik/SPO/lab6", mode_dir );

creat ( "/home/demik/SPO/lab6/test1", mode_file );

creat ( "/home/demik/SPO/lab6/test2", mode_file );

symlink ( "/home/demik/SPO/lab6/new_test1", "/home/demik/SPO/lab6/link1" );

symlink ( "/home/demik/SPO/lab6/new_test2", "/home/demik/SPO/lab6/link2" );

mkdir ( "/home/demik/SPO/lab6/dir1", mode_dir );

mkdir ( "/home/demik/SPO/lab6/dir2", mode_dir );

if (fork()==0) 

wait(0);

else 

execl("/bin/ls", "ls","--color=never", "--file-type", "-Q", "/home/demik/SPO/lab6",NULL);

rename ( "/home/demik/SPO/lab6/test1", "/home/demik/SPO/lab6/new_test1" );

rename ( "/home/demik/SPO/lab6/test2", "/home/demik/SPO/lab6/new_test2" );

remove ( "/home/demik/SPO/lab6/new_test1" );

remove ( "/home/demik/SPO/lab6/dir1" );

remove ( "/home/demik/SPO/lab6/link1" );

if (fork()==0) 

wait(0);

else

execl("/bin/ls", "ls","--color=never", "--file-type", "-Q", "/home/demik/SPO/lab6",NULL);

return 0;
}
Злостный анимешнег =^.^=
Демик вне форума Ответить с цитированием
Старый 19.04.2012, 12:40   #2
Демик
Форумчанин
 
Аватар для Демик
 
Регистрация: 30.01.2011
Сообщений: 231
По умолчанию

Может у кого есть какие идеи, как можно сделать иначе?
Злостный анимешнег =^.^=
Демик вне форума Ответить с цитированием
Старый 19.04.2012, 17:44   #3
Демик
Форумчанин
 
Аватар для Демик
 
Регистрация: 30.01.2011
Сообщений: 231
По умолчанию

Вот, сделал по другому, так правильно?
Код:
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <errno.h>
#include <termios.h>
#include <unistd.h>
#include <sys/types.h>
#include <dirent.h>

int main (int argc, char* argv[]){
int mode_dir = 0760;
int mode_file = 0760;

DIR *dir;
struct dirent *entry;

mkdir ( "/home/demik/SPO/lab6", mode_dir );

creat ( "/home/demik/SPO/lab6/test1", mode_file );

creat ( "/home/demik/SPO/lab6/test2", mode_file );

symlink ( "/home/demik/SPO/lab6/new_test1", "/home/demik/SPO/lab6/link1" );

symlink ( "/home/demik/SPO/lab6/new_test2", "/home/demik/SPO/lab6/link2" );

mkdir ( "/home/demik/SPO/lab6/dir1", mode_dir );

mkdir ( "/home/demik/SPO/lab6/dir2", mode_dir );

dir = opendir("/home/demik/SPO/lab6/");
   if (!dir) {
       perror("diropen");
       exit(1);
   }

   while ( (entry = readdir(dir)) != NULL) {
   	 switch ( entry->d_type ) {
			case 4:
				printf("Папка");
				break;
				
			case 8:
				printf("Файл");
				break;
				
			case 10:
				printf("Ссылка");
				break;
			
		}
       printf(" %s [%d] \n", entry->d_name, entry->d_type);
   }

   closedir(dir);
   
getchar();

rename ( "/home/demik/SPO/lab6/test1", "/home/demik/SPO/lab6/new_test1" );

rename ( "/home/demik/SPO/lab6/test2", "/home/demik/SPO/lab6/new_test2" );

remove ( "/home/demik/SPO/lab6/new_test1" );

remove ( "/home/demik/SPO/lab6/dir1" );

remove ( "/home/demik/SPO/lab6/link1" );

dir = opendir("/home/demik/SPO/lab6/");
   if (!dir) {
       perror("diropen");
       exit(1);
   }

   while ( (entry = readdir(dir)) != NULL) {
   	
   	switch ( entry->d_type ) {
			case 4:
				printf("Папка");
				break;
				
			case 8:
				printf("Файл");
				break;
				
			case 10:
				printf("Ссылка");
				break;
			
		}
   
   
       printf(" %s [%d] \n", entry->d_name, entry->d_type);
   }

   closedir(dir);

getchar();

return 0;
}
Злостный анимешнег =^.^=
Демик вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Среда разработки под Lunix toxid13 Общие вопросы C/C++ 1 18.01.2012 11:06
Проблемы с InstallScape в Lunix Sam Gold Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) 21 04.06.2011 00:46
Дочерний процесс. Создание и "слежение" SNUPY Общие вопросы Delphi 8 16.12.2009 13:17
Программа, выполняет дочерний процесс IgorArhangel Помощь студентам 3 24.01.2009 23:12