Помогите написать программу.

Надо написать программу на c++.
Допустим есть папка my programm, в ней есть фаилы usr/bin/programm и 1/script. Надо чтобы в папке usr/bin/ была создана ссылка programm на my programm/usr/bin/programm, а в корневой папке была созданна папка 1 и в ней ссылка script на my programm/1/script (при зтом my programm может находиться где угодно). В программирование я новичёк поэтому жду ваших советов и какие книги надо прочитать по этой теме.

+1
akal - 9 Август, 2014 - 14:04
Изображение пользователя akal.

Ну, начать, пожалуй, надо с самого C++. Литературы, по сути, валом.
Когда я учился, преподаватель рекомендовал Герберта Шилдта читать. Например.
Еще мне понравилось изложение Стивена Пратта, вот.
А вообще подбор литературы - это индивидуальный подход, т.к. восприятие у людей разное. Ну а программу вряд ли кто-то за Вас будет писать :-).

0
MacLeod - 9 Август, 2014 - 17:07
Изображение пользователя MacLeod.

Когда я, относительно недавно, помогал одной ленивой студентке, настоятельно рекомендовал прослушать весь курс лекций (ссылка на первую, остальные можно найти по тому же аккаунту YouTube, только внимательно, там выложено два семестра).
А вообще, стоит понять, в чем отличия между С и С++, между низкоуровневым и высокоуровневым подходом. Практически, изучение простейших конструкций языка нужно только для понимания, реально же, использовать, к примеру, массивы - это уже зло. На это есть контейнеры STL (или boost), правильно подобрав которые под конкретные задачи, можно не потерять в производительности, а избежать многих ошибок и сэкономить время.
Как нужно понять, что для обращения к средствам вроде С++ нужно только в определенных случаях (высокая производительность, реалтайм и т.д.). В случае с каталогами - можно, конечно, использовать stdio, системные вызовы или какой-либо API, вплоть до Qt, из С++, но в большинстве случаев это будет стрельбой из пушки по воробьям (когда вместо этого можно написать скрипт на bash, python или другом высокоуровневом языке.

0
fox4 - 10 Август, 2014 - 13:23
Изображение пользователя fox4.

Ну уважаемый MacLeod молодой человек решил изучать С++ и QT пусть изучает.
Подсказка: QCoreApplication::applicationFilePath ()

и ещё добавка

Подсказка в примерах

ну алгоритм надеюсь сам разработает...

0
Condor - 11 Август, 2014 - 22:09
Изображение пользователя Condor.

Мак, между прочим, дело говорит.
Баша в данном случае за глаза хватит, ничего дополнительно доставлять не надо, пишешь скрипт, делаешь его выполняемым, вот и вся программа.
Нужно правильно подходить к выбору инструмента, гвоздь на 10 не стоит забивать кувалдой.
С, С++, это очень хорошо, С++ в принципе мой любимый язык программирования, но учитывая задачу автора, он будет явно избыточен.

+1
fox4 - 11 Август, 2014 - 23:44
Изображение пользователя fox4.

Баша конечно хватит но вот TC принял решение быть программистом на C и C++. Давайте не будем давить, а дадим возможность выработать своё решение. После опубликования хотя бы простейшего кода будет возможность обсудить достоинства и недостатки написанной программы

0
Condor - 12 Август, 2014 - 08:15
Изображение пользователя Condor.

Стоит задача: нужно перевезти ящик 10*10*10 сантиметров.
Что будет правильнее, заказать десятитонную фуру, отвезти коробку на машине, или вообще воспользоваться велосипедом.
Фура отпадает, останется легковой автомобиль или велосипед, если тепло, нет дождя и везти коробку не далеко, то велосипед будет лучшим выбором.
Под любую задачу, особенно в программировании, нужно учитывать используемые ресурсы и не привыкать смолоду бездарно расходовать ресурсы.
Ещё раз повторю, C и C++ это очень круто и правильно, но не для простейших действий.
Если примитивная программа прожига дисков весит 500 мегабайт, а простейший редактор текста, наподобие kate, весит 100, то нахер не нужны такие программы и программисты, которые их пишут.

0
MacLeod - 12 Август, 2014 - 09:25
Изображение пользователя MacLeod.

А я ведь не призывал к холивару =)
А всего-то к последовательности в изучении высокоуровневых/низкоуровневых подходов.
Что до С++ и принятого решения изучать - это отлично, только лучше изначально представлять, что к чему.
Лезть на низкий уровень без надобности - частая ошибка начинающих. Помню, как в студенчестве ваял проги на Borland C++ с асмовыми вставками, считая, что круто изобретать велосипед (хотя по специальности я больше экономист-управленец, чем айтишник).
Лет восемь назад, мне довелось собеседовать одного студента-энтузиаста в компанию, где я тогда работал, на должность виндовз программиста. Он мне травил невероятные байки про использование MFC и, большей частью, WinAPI как постоянной составляющей разработки интерфейсов, да и вообще учетных программ по обработке и хранению данных в реляционных базах. До сих пор помню его возмущение, негодование и растерянность, когда я попросил его продемонстрировать разработку простейшего проекта не в Visual C++, а в С# на Forms. Он так и ушел, с советом поискать работу, связанную с разработкой игр на собственных 3D движках, что, насколько я помню, он в итоге и сделал.
Что до ТСа, то мой совет был в последовательности изучения. Сначала понять, как происходит простейшая линковка без IDE, потом уже cmake (имхо, потому что зверски удобно и кроссплатформенно). Азы языка. Хотя бы бегло сишную либу (линух же, системспейс, все дела). Досконально ООП. Азы STL, а потом уже апи вроде Qt. Иначе будет взрыв мозга, ошибки и непонимание, что делает.

2Condor
Ресурсами, при использовании С++, будет именно увеличенное время на разработку, более высокая вероятность ошибок и, опять же, время на их исправление и отладку.
А программы прожига на 500 метров появляются совсем не из-за низкоуровневых средств, а по маркетинговым причинам. Дороже, да и вероятнее, можно втюхать чайнику именно кухонный комбайн, чем легковесную софтинку на 2 метра =)

0
Andru - 13 Август, 2014 - 03:45

Пишу bash уже несколько дней (интернет медленный, Googl иногда нето выдаёт).
Нужна информация по работе с переменными, например есть число 4567 нужно взять все цифры до 6 или после 6 или есть путь /home/andru/Программа/usr/... нужно взять путь после Программа/.
Пока есть вот это

#! /bin/bash

echo -n 'Введите путь до deb пакета: ' && read put
echo -n 'Куда установить пакет: ' && read sava
echo -n 'Имя программы: ' && read name
if [ ! -d $sava ]
then
mkdir $sava
fi
dpkg -x $put $sava/$name
mkdir $sava/$name/DEBIAN
dpkg -e $put $sava/$name/DEBIAN

Дальше должно идти:
найти все фаилы в паке то есть
find $sava/$name -type f кроме паки $sava/$name/DEBIAN
создать ссылку на файл если он есть то есть
ln -t здесь пишется каталог где создаётся ссылка на файл (формируется он так, путь к фаилу без $sava/$name) дальше просто путь к фаилу.
Например есть файл $sava/$name/usr/ben/213. Ссылка создаётся по пути /usr/ben/ к фаилу 213.
Ну и в конце выводит надпись всё сделано или ошибка.
Потом надо будет перевести на язык С++ ну и сделать графический интерфейс.
Кстати, Bash-ем начал заниматься после того как в Google ввёл команду QCoreApplication::applicationFilePath () (чтобы найти больше информации) и на одном форуме было сказано, что для решение похожей задачи можно написать bash скрипт.

+2
fox4 - 13 Август, 2014 - 08:54
Изображение пользователя fox4.

Вот

информация а здесь довольно полезная книга по bash.
ИМХО: Если всё таки программа должна быть написана на языке С++ так и пишите на С++ зачем вы делаете двойную работу. Хотя знание Bash-а будет несомненным плюсом вам в будущем. И ещё может я не совсем правильно понял постановку ВАШЕЙ задачи но сдаётся мне что ВЫ путаетесь в терминах. ВЫ знаете разницу между бинарным исполняемым файлом в Linux и deb пакетом ?
ЗЫ: Внимательней читайте посты. В ссылке http://qtdocs.narod.ru/4.1.0/doc/html/qcoreapplication.html#applicationFilePath прямо описан метод applicationFilePath () класса QCoreApplication возвращающий полный путь запущенной на исполнение программы от этого и "танцуем".
0
Andru - 14 Август, 2014 - 12:14

Я улучшил скрипт. Теперь он такой

Вообще у меня была идея написать менеджер пакетов который позволял бы устанавливать их в любую папку ну или на другой диск. Кроме c++, паскаля, ассемблера, джава и ещё пары языков я больше не знал как этого сделать, по этому и создал тему по написанию программы на c++, про bash не знал. Но на c++ я потом переведу после того как доделаю bash скрипт.
0
Andru - 15 Август, 2014 - 00:15

Прочитал про циклы и написал скрипт проба следующего содержания.
#! /bin/bash

while read line1; do
while read line; do
echo "$line"
done < /home/andru/1234/2
echo "$line1"
ln -s "$line" "$line1"
done < /home/andru/1234/1

Создал папку /home/andru/1234/ два фалйа
1 такова содержания
/home/andru/1
/home/andru/2
/home/andru/3
/home/andru/4
2 такого содержания
/home/andru/1234/1
/home/andru/1234/2
/home/andru/1234/3
/home/andru/1234/4
во общем он работает и всё хорошо, добавил в скрипт

while read line1; do
while read line; do
echo "$line"
done < /$stroc/1
echo "$line1"
sudo ln -s "$line" "$line1"
done < /tmp/1

И он не работает. Не пойму почему. Два файла есть. Всё есть. Что надо?

0
Andru - 10 Август, 2014 - 10:43

Подскажите, как это можно реализовать?

+1
mft - 16 Август, 2014 - 08:54

Зачем это вообще надо? какая цель? установка пакетов в другую корневую директорию? dpkg это умеет и так...

0
Andru - 16 Август, 2014 - 12:29

хорошо, как?

0
dyug - 17 Август, 2014 - 10:53

весьма помогает в таких случаях набрать команду man dpkg

0
MacLeod - 17 Август, 2014 - 20:56
Изображение пользователя MacLeod.

Ага. А если хочется сделать свой графический интерфейс - наваять форму на QtQuick и сделать скриптовые обработчики событий... Казалось бы, при чем тут с++

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры