LINUX.ORG.RU

Сообщения generator_mmf

 

Выполнение инкрементирования в течение определенного времени с использованием сигналов

Форум — Development

Следующая программа выполняет инкрементирование переменной в бесконечном цикле в течение нескольких секунд, потом происходит вывод полученного значения и обнуление переменной. Нужно реализовать тоже самое, но с использованием сигналов и функций для работы с ними.

int i = 0, sec = 1, elapsed;
time_t start, end;
while (1)
{
 time (&start);
 while (elapsed < sec)
 {
  time (&end);
  elapsed = difftime (end, start);
  i++;
 }
 printf ("i = %d\n", i);
 sec++;
 i = 0;
}
return 0;

 , ,

generator_mmf
()

Выполнение инкрементирования в течение определенного времени

Форум — Development

Подскажите, пожалуйста, как реализовать операцию инкрементирования переменной так, чтобы ее значение выводилось раз в несколько секунд. Мне приходит в голову такой вариант:

i = 0;
while (time < 10s)
{
 i++;
}
printf ("i = %d\n", i);
Проблема в том, что в программе бессмысленно писать time < 10s.

 , ,

generator_mmf
()

Максимальный размер канала

Форум — Development

Вот программа, которая путем записи в канал до тех пор, пока он полностью не заполнится, должна находить максимальный размер канала. При выполнении программы я получаю числа, последнее из которых 8191. Но это ведь не размер в байтах. Как получить размер?

#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>

int main() {
	int fd[2], result, i = 0;
	size_t size;
	if (pipe(fd) != 0) {
		printf("Can\'t create pipe\n");
		return;
	}
	while (1) {
		size = write(fd[1], "Message", 8);
		printf("%d\n", i++);
	}
	return 0;
}

 ,

generator_mmf
()

Работа с функциями семейства exec

Форум — Development
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
int main(int argc, char* argv[], char *envp[])
{
 char *p;
 p = getenv("PATH");
 strcat(p, ":.");
 setenv("PATH", p, 1);
 pid_t pid = fork();
 pid_t waitpid();
 if (pid == 0)
 {
  execle("ex1", argv[0], argv[1], argv[2], argv[3], NULL, envp);
 }
 else
 {
  waitpid(pid, NULL, 0);
 }
 return 0;
}
Данная программа считывает параметры командной строки и запускает дочерний процесс с этими параметрами.

Для чего в этой программе нужны следующие строки?
 char *p;
 p = getenv("PATH");
 strcat(p, ":.");
 setenv("PATH", p, 1);

 , ,

generator_mmf
()

Нюансы работы fork

Форум — Development

Есть такая программа:

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
 pid_t pid, ppid, a = 0;
 pid_t child_id = fork();
 printf("First fork id id:%d\n", (int) child_id);
 printf("Second fork id%d\n", child_id = (int)fork());
 printf("*PID:%d PPID:%d\n", pid = (int)getpid(), ppid = (int)getppid());
}


Если рассуждать логически, то у нас есть два вызова fork, которые порождают четыре процесса, и три printf. По моей логике при выполнении программы я должен получить 12 строк (4 процесса умножить на 3 printf), но получается только 10 строк.
Помогите разобраться.

 , , ,

generator_mmf
()

RSS подписка на новые темы