Я изучаю компиляцию / запуск простых программ на C ++ из оболочки bash (в Ubuntu 12.04). Будучи новичком в Linux в целом, у меня фактически есть пара вопросов.
Во-первых, кажется, что Ubuntu / Linux не отображает типы файлов в формате .abc, как это делает Windows. Я понял, что ОС не нужно это расширение, чтобы знать тип файла, но не удобнее ли пользователю-человеку сразу же прочитать эту информацию? Как я должен знать, какой тип у данного файла?
Во-вторых (и соответственно), если Linux, похоже, не заботится о расширении имени файла информацией о типе, почему это происходит, когда я создаю простой C ++? запрограммируйте в gedit и просто назовите его «test», компиляция не работает (используя gtit-компилятор g ++), но когда я называю файл «test.cpp», он работает?
Нужно ли Linux / заботиться о расширении или нет? Я чувствую, что получаю смешанные сообщения здесь, и я действительно хотел бы понять.
У вас нет для присвоения имени файлу определенного суффикса, однако компиляторы gcc / g ++ используют суффикс в качестве ярлыка, чтобы решить, как обрабатывать файлы. Если вы хотите использовать другой суффикс (или без суффикса), вы можете указать компилятору, какой тип файла это явно, используя опцию командной строки -x
- см. Ответ на этот аналогичный предыдущий вопрос Компиляция исходного файла C без .c Достаточно
В любой операционной системе то, что вы сказали, правильно: расширение файла не определяет тип файла. Расширения используются, чтобы сообщать программам (и людям), какого типа файл будет. Как правило, файлы без расширения являются двоичными файлами, однако это не является строгим правилом.
Имеет ли значение, имеет ли файл расширение? Это зависит от программы. Некоторые, такие как OpenOffice или Gedit, не будут задавать никаких вопросов о расширении имени файла, но все равно откроют файл независимо от того, какая ошибка может возникнуть. Более умные программы, такие как g ++, проверяют расширение имени файла перед анализом, чтобы предотвратить человеческую ошибку. Кроме того, существуют программы, такие как медиаплееры, которые доверяют вам использовать правильное расширение для файла и использовать расширение для определения способа запуска.
В заключение можно сказать, что Linux не очень заботится о расширениях имен файлов. Это позволяет людям и программам принимать обоснованные решения о присвоении имен своим файлам. Расширения имеют свое место, но они не являются определяющими в отношении того, что такое файл.
Пользователь-человек, чтобы иметь возможность сразу же прочитать эту информацию?
Помните, что Linux - это Unix-подобная операционная система. С древних времен * nix использовал разные методы для определения того, что такое файл, например, file
, шебанг, волшебный бит и т. Д. Разработка UNIX / Linux под DOS, CP / M, которую делает наследие Windows. Поэтому расширения, как правило, менее значимы для большинства утилит и инструментов Linux.
Как я должен знать, какой тип у данного файла?
Вы просите систему сообщить вам. Для этого используется file
, и большинство (если не все) файловых менеджеров используют магический бит, чтобы определить, о чем идет речь.
Если Linux, похоже, не заботится о расширении имени файла с помощью информации о типе, то почему, когда я создаю простую программу на C ++ в gedit и просто называю ее «test», компиляция не работает (используя компилятор g ++), но когда я называю файл test.cpp, он работает?
Это для мобильности, и так как они были такими с самого начала. Поскольку Linux не заботится о расширении, а Windows заботится, то они заставляют обе ОС распознавать, о чем идет речь.
Unix был создан с идеей взаимодействия файлов, дескрипторов, разрешений, каналов, ссылок, программ и т. Д. Предполагалось, что программисты все сделают правильно. Таким образом, вся ветка Linux в Unix построена на одной идее, а не на строгих расширениях типов, используемых в качестве основы для организации системы. Просто так получилось, что ранние компиляторы c, которые использовались для сборки unix, имели расширения файлов, чтобы было проще использовать взаимодействие с объектными, исходными и скомпилированными файлами. Так что они застряли.
Windows не использует расширения типов, чтобы помочь пользователям, но потому что структуры, которые она использует, гораздо менее гибки.
Наконец, gnu / linux / ubuntu также изучают опыт необходимости, и вы должны позитивно относиться к различиям между ними и Windows, потому что вы действительно узнаете, как работают компьютеры, делая это.