Я так понял, с помощью /dev/tcp можно только соединиться с удаленным сервером, а открыть порт, принимающий соединения, нельзя. Netcat прекрасно справляется с этой задачей (ключ -l).
Что-то тут про сложность перехода много говорят. Моя подруга однажды увидела в Убунту «резиновые окна» с красивыми заголовками, у которых можно произвольным образом менять цвет. С тех пор она не пользуется windows :) Помощь со стороны при этом минимальна. Даже и не знаю, я вот раньше тоже думал, что линукс очень тяжел для новичка, а на деле даже родители без проблем пользуются Убунту. Так что в последнее время есть некоторый прогресс в дружелюбности дистрибутивов, я считаю.
Не подскажете нормальное место, куда можно залить код? Оказалось, что pastebay вставляет переносы строк в стиле Windows, из-за чего указание интерпретатора с помощью #! перестает работать.
У Вас ошибочные рассуждения во второй строке. Вы считаете вероятность отказа raid0+1 как вероятность одновременного отказа двух raid0, а это неверно. В первом рейд0 может сломаться первый диск, а втором — второй. Тогда, следуя Вашим рассуждениям, получается, что весь массив отказал, но на деле это не так. Думаю, ясно почему.
Ответ 2n^2 — n^4 правильный. Массив raid0+1 выходит из строя тогда, когда ломаются два соответствующих диска. Пусть массив состоит из четырёх дисков A, B, C и D, причем B является зеркалом A, а D — зеркалом C.
Тогда возможны следующие ситуации отказа:
1) отказали оба диска A и B
2) отказали оба диска C и D.
И первый, и второй случай происходят с вероятностью n^2. Однако складывать вероятности тут нельзя, потому что эти два события пересекаются. Приведем их к не пересекающемуся виду:
1) отказали оба диска A и B
2) событие 1 не произошло, однако отказали сразу C и D
Итак, вероятность первого события есть n^2, второго — (1 — n^2)*n^2 = n^2 — n^4. Так как события не пересекаются, их вероятности можно сложить, и получим ровно 2n^2 — n^4.
Полностью на баше, из внешних программ используются только netcat для передачи данных по сети, stty для настройки терминала и clear для очистки экрана. Постараюсь сегодня-завтра опубликовать.
Printf, вообще говоря, не может написать меньше, чем ему дали на вход. В случае ошибки он вернет отрицательное число, но с такой ошибкой уже ничего не сделаешь. Поэтому правильный Hello World с элементами паранойи выглядит так:
#include <stdio.h>
int main() {
return printf("Hello world!") < 0;
}
И, кстати, вот тут полная ерунда написана: const char const* msg = "something";
Второй const здесь лишний. Это все равно что написать «const const char*». Если Вы хотели сделать постоянным указатель, следовало написать так: const char* const msg = "something";
Да-да, проверьте — напишите там ++msg и компилятор все соберет.
А еще лучше — объявить строку как массив: const char msg[] = "something";
Статью я бы перенес в блог «Я безмуный» или «Ненормальное программирование».
А если заниматься настоящей паранойей, то нужно доводить дело до конца. Например, не мешало бы еще обрабатывать EAGAIN, а то вдруг у нас стандартный вывод оказался в неблокирующем режиме. И что же делать, если write будет все время возвращать ноль?
Как-то пытались сварить, получилось что-то вроде соплей с сахаром.
В итоге залил код на «Народ».
Ответ 2n^2 — n^4 правильный. Массив raid0+1 выходит из строя тогда, когда ломаются два соответствующих диска. Пусть массив состоит из четырёх дисков A, B, C и D, причем B является зеркалом A, а D — зеркалом C.
Тогда возможны следующие ситуации отказа:
1) отказали оба диска A и B
2) отказали оба диска C и D.
И первый, и второй случай происходят с вероятностью n^2. Однако складывать вероятности тут нельзя, потому что эти два события пересекаются. Приведем их к не пересекающемуся виду:
1) отказали оба диска A и B
2) событие 1 не произошло, однако отказали сразу C и D
Итак, вероятность первого события есть n^2, второго — (1 — n^2)*n^2 = n^2 — n^4. Так как события не пересекаются, их вероятности можно сложить, и получим ровно 2n^2 — n^4.
Программирования, всё-таки.
#include <stdio.h>
int main() {
return printf("Hello world!") < 0;
}
И, кстати, вот тут полная ерунда написана:
const char const* msg = "something";
Второй const здесь лишний. Это все равно что написать «const const char*». Если Вы хотели сделать постоянным указатель, следовало написать так:
const char* const msg = "something";
Да-да, проверьте — напишите там ++msg и компилятор все соберет.
А еще лучше — объявить строку как массив:
const char msg[] = "something";
Статью я бы перенес в блог «Я безмуный» или «Ненормальное программирование».
А если заниматься настоящей паранойей, то нужно доводить дело до конца. Например, не мешало бы еще обрабатывать EAGAIN, а то вдруг у нас стандартный вывод оказался в неблокирующем режиме. И что же делать, если write будет все время возвращать ноль?