LINUX.ORG.RU

Обьясните суть происходящего при добавлении в stdout «\n»

 , ,


0

7

Первый вариант:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
 
int main() 
{
 
  printf("1234 ");
  fork();
  exit(0);
}
Выхлоп предсказуем:
faust@localhost 1]$ ./2
1234 1234 [faust@localhost 1]$
Второй вариант:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
 
int main() 
{
 
  printf("1234 \n");
  fork();
  exit(0);
}
Выхлоп удивил:
[faust@localhost 1]$ ./2
1234 
[faust@localhost 1]$

Может кто-то объяснит что да как?

З.Ы. Собирал просто: gcc -o 2 2.c

★★★★★

Последнее исправление: cetjs2 (всего исправлений: 2)
Ответ на: комментарий от Eddy_Em

Согласен.
Вот ещё одна идиотская математическая задачка от яндекса:
Дана функция на языке Python. Завершится ли когда-нибудь вызов dio()?Почему?

def dio():
       x = 1L
       while 1:
           for y in xrange(1, x):
             for z in xrange(1, y):
               if x*x == y*y + 12752041*z*z:
               return "Found it"
           x = x + 1

drfaust ★★★★★
() автор топика
Последнее исправление: drfaust (всего исправлений: 1)
Ответ на: комментарий от oneliner

Неправильно скопипастил - вот правильно:

def dio():
   x = 1L
   while 1:
       for y in xrange(1, x):
           for z in xrange(1, y):
               if x*x == y*y + 12752041*z*z:
                   return "Found it"
       x = x + 1
Тоже питон почти не знаю.

drfaust ★★★★★
() автор топика
Последнее исправление: drfaust (всего исправлений: 1)
Ответ на: комментарий от drfaust

Завершится ли когда-нибудь вызов dio()?Почему?

Судя по x = 1L, пытаются намекнуть на то, что xrange, работает только в диапазоне «коротких» чисел, а искомый ответ попадает в диапазон «длинных», поэтому найден никогда не будет.

Питон не знаю, считать лень :)

cdslow ★★
()
Ответ на: комментарий от drfaust

завершится если у уравнения x*x == y*y + 12752041*z*z есть решение

почему? потому что в питоне у лонга нет предела :)

anonymous
()
Ответ на: комментарий от anonymous

Не угадал :) 3572^2=12759184
По поводу решения уравнения верно, но есть ли оно? Школу закончил давно и решать енто уравнение(подбирать параметры) нет никакого желания.
Скорее всего ответ кроется в нюансах написания проги, где-то допущена ошибка и верного результата не будет, а прога завершится
С питоном я никак (ну парочка хеловордов). Просто хотел показать дебилиз задачек яндекса, как и абсолютно неправильное применение fork`а в примере выше.
P.S. Я, к стати, подставив в printf(«%i»,getpid()) добивался трёх состояний: нет вывода вообще :rolf: , вывод только от папы и вывод обоих (это в терминал без перенаправления). При этом не было никакой перекомпиляции - работала одна и таже прога.
Все эти результаты говорят о разном возможном поведении из-за неверного применения fork(состояние потомка никак не отслеживается, буфер общий, факт рождения потомка тоже не отслеживается, «папа» не ожидает конца жизни «сына» и пр.). Эдди уже намекал на демонизацию «отпрыска».

drfaust ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.