mp3moto
-
Постов
10 -
Зарегистрирован
-
Посещение
Никогда
Сообщения, опубликованные mp3moto
-
-
Привожу код программы:
int main(){
int fifo1[2], fifo2[2], fdr, st, i;
FILE *f;
char buff[1024];
if((mknod("fifo1",S_IFIFO|0666,0)<0) && (errno != EEXIST))
printf("FIFO ERROR");
f = fopen("msg.txt","r");
if ((fdr = open("fifo1",O_WRONLY))<0)// <=======
printf("\nERROR");
else printf("0");
write(fdr,"message",1024);
printf("\nexecuting client");
if (fork == 0)
execvp("./client",NULL);
while(i=wait(&st)>0);
unlink("fifo1");
/*fgets(buff,1024,f);
printf(buff);*/
exit(0);
}
Вопрос: почему процесс "засыпает" на месте отмеченном <======= ??? Файл fifo1 функцией mknod вроде как создается (в текущей папке появляется значок "кран"), а открыть его не может... Или может от того, что fifo1 пустой и процесс ждет пока туда кто-нибудь что-нибудь запишет??? Тогда как это сделать? Заранее благодарю!
-
Спасибо!
-
Возникает проблема при попытке открыть FIFO-файл. Создается он нормально:
mknod("fifo1",S_IFIFO|0666,0)
а при попытке открыть
int f;
f=open("fifo1",1)
Компилятор говорит: 'open' was not declared in this scope
Я не знаю почему f целочисленная (так написано в методичке), может какой-нибудь другой тип ей присвоить надо? Или заголовочный файл подключить? файлы sys/types.h и sys/stat.h и unistd.h подключены.
Заранее благодарю!
-
Эээээ... ну спасибо за помощь! А то я думал, что "дедушка" должен умирать последним! А еще вопрос, может ли время выполнения процесса быть равным нулю??? У меня в программе все "родители" выводят нули, а последнее поколение процессов выводит время своей работы. Реализовано при помощи стандартной структуры tms... Если надо код напишу.
-
Кусок программы:
for (i=0;i<3;i++)
if (fork() == 0)
execvp("./son",NULL);
else
wait(st);
Родительская программа запускает 3 процесса Son и вроде как должна дождаться пока они все не закончат свою работу.
Почему родительская программа не ждет окончания выполнения дочерних?
-
Спасибо ОГРОМНОЕ! Теперь все работает! Запускаетс! А посоветуйте, что лучше прочитать про линукс?
-
Есть такой вопрос, пишу программы на С++, а компилирую утилитой g++. Прогу отладил, ошибок нет, объектный и исполняемый файл создаются. Но почему-то когда я пытаюсь запустить приложение двойным щелчком ничего не происходит. Сначала я подумал, что программа слишком быстро выполняется и я ничего не успеваю заметить. Но потом поставил в самом начале scanf("%d",i); Т.е. в этом месте она должна ждать пока я чего-нибудь введу. Но повторяется та же картина. А если запускать через терминал:
комманда dir выводит, что в текущем каталоге есть исполняемый файл proga, когда я ввожу exec proga мне выдает bash: exec: proga: not found. Что не так, подскажите пожалуйста! Прилагаю скриншот.
-
Да вроде ничего и не мудрил такого... рекоммендованные параметры везде выбирал... Поиск в гугле тоже особых результатов не дал. Блин, что еще можно попробовать???
-
Подскажите please, как сделать реализовать выбор между windows и linux перед загрузкой ОС? Раньше я ставил ASP Linux, так он мне сам красивый такой загрузчик сделал, где выбирать можно было. А сейчас Mandriva 2007 установил, а грузится все равно windows.
Программирование с семафорами
в Программирование: C / C++
Опубликовано
Привожу кусок кода:
int i, shmId1, semId1;
unsigned short int ray[2] = {0,0};
union semun
{
int val;
struct semid_ds*buf;
unsigned short int *array;
struct seminfo*_buf;
}ar;
shmId1 = shmget(11,200,IPC_CREAT|0666);
if(shmId1 == -1)
printf("Creator: Shared memory 1 not created\n");
else
printf("Creator: Shared memory 1 created\n");
semId1 = semget(98,1,IPC_CREAT|0666);
if(semId1 == -1)
printf("Creator: Semafors not created\n");
else
printf("Creator: Semafors created\n");
ar.array = ray;
i = semctl(semId1,1,SETALL,ar.array);
if(i == -1)
{
printf("Creator: Semafors not installed!\n");
exit(-1);
}
else
printf("Creator: Semafors installed in BLOCK option\n");
printf("%d \n",semctl(semId1,0,GETVAL,0));
printf("%d \n",semctl(semId1,1,GETVAL,0));
}
//-------------------------------------------------------
В конце программы я запрашиваю значения каждого семафора в наборе и программа выводит 0 и -1. Почему так? Ведь должно быть 0 и 0.