Kauf dir doch lieber einen minimal teureren LibreComputer mit Rockchip. Die unterstützen 64 Bit und bringen gleich 4GB RAM mit, erlauben echtes GBit Ethernet, haben USB 3 und und und ...

Das einzige, was bei den RasPis gut ist, ist die Softwareseitige Unterstützung, wobei man natürlich auf ekelhafte Binärblobs vom Hersteller angewiesen ist. Aber Hardwaretechnisch sind RasPis eigentlich schon extrem veraltet, wenn sie veröffentlicht werden!

Bei Neukäufen würde ich heutzutage auf prähistorische Hardware aka RasPi verzichten. :)

...zur Antwort

Ich habe ein paar selbstständige Bekannte Webdeveloper, die krepeln mit 5000 bis 7000€ pro Monat rum, aber sind wunschlos glücklich damit, auch wenn sie damit zusätzliche Dinge wie Büro, PKV, etc. bezahlen müssen, die auf einen Angestellten nicht drauf zukommen würden.

Die machen allerdings nebenbei auch noch Apps, also quasi alles aus einer Hand, und sind seit vielen Jahren richtig gut, in dem, was sie tun.

Die meisten Webentwickler werden aber weniger verdienen! Allerdings solltest du dir als ein solcher auch mal Appentwicklung angesehen haben.

...zur Antwort

Ich kann mir kaum vorstellen, dass dein Lehrer so etwas erwartet, aber hier die lange Version:

#include <stdio.h> /* FILE, fopen */
#include <stdlib.h> /* EXIT_SUCCESS, size_t, system */

#define EXPECT(cond, msg) \
	if (!(cond)) { \
		fputs(\
			"ERROR: " msg " (" #cond ")\n", \
			stderr \
		); \
		goto cleanup; \
	}

#define BUFSZ 1024

int main(void) {
	int result = EXIT_FAILURE;

	FILE * fp = NULL;

	char buf[BUFSZ] = { '\0' };
	size_t read = 0;

	system("date >dateout.txt");

	fp = fopen("dateout.txt", "r");
	EXPECT(fp != NULL, "fopen failed");

	read = fread(buf, sizeof(*buf), BUFSZ, fp);
	EXPECT(read > 0 && read < BUFSZ, "nothing to read");
	buf[read] = '\0';

	printf("Uhrzeit: %s", buf);
	result = EXIT_SUCCESS;

cleanup:
	if (fp) {
		fclose(fp);
	}

	return result;
}

Hier ist noch eine kleinere Pfusch-Funktion:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
	printf("Uhrzeit: ");
	fflush(stdout);
	
	system("date");

	return 0;
}

Dann gibt es noch mehr Möglichkeiten, indem du die Standardausgabe umbiegst, mit Pipes arbeitest und / oder ein fork-exec-wait-Triple nutzt.

Allerdings bin ich mir gerade nicht sicher, ob du deine Aufgabenstellung wirklich verstanden hast, denn die Aufgabe ist gar nicht so trivial.

Und noch ein Tipp zum Schluss: Nutze NIEMALS system(), denn das Verhalten ist in vielen Situationen undefiniert oder mehrdeutig! In der anderen Antwort wird dir gesagt, dass ein Rückgabewert von 0 bedetet, dass alles in Ordnung war, aber das stimmt NICHT!

Diese Funktion kann auch 0 zurück liefern, wenn gar keine Shell verfügbar ist. Außerdem hat system() viele Seiteneffekte und ist ein potentielles Sicherheitsrisiko.

...zur Antwort

Asien ist ein Kontinent und kein Land! Wesentlich größer als Europa. Und selbst innerhalb von Westeuropa sind die landesspezifischen Unterschiede enorm. Allein schon innerhalb von Deutschland.

Von daher: Ja, "Asiaten" denken größtenteils anders. Aber wie genau dieses "anders" aussieht, hängt vom Land und der Region ab!

...zur Antwort

Bei gutem Wetter kannst du über UKW viele japnische Sender empfangen, da die gesendeten Signale auf dieser Frequenz recht effektiv immer wieder innerhalb der Atmosphäre reflektiert werden, bis sie bei uns ankommen.

DAB+ gibt es in Japan nicht und selbst wenn, sind die dafür notwendigen Frequenzen sehr ungeeignet um innerhalb der Atmosphäre reflektiert zu werden.

Allerdings streamen viele Radio- und Fernsehsender im Internet. Mit einem VPN für ca. 1 bis 5 Euro pro Monat kann man die alle hier in Deutschland "empfangen". Eignet sich aber vermutlich nur für Leute, die halbwegs Japanisch sprechen, da du dabei ja keine Untertitel hast.

...zur Antwort

Neben dem, was die anderen in ihren Antworten bereits geschrieben haben, helfen Getter / Setter auch dabei, die interne Konsistenz eines Objektes zu erhalten.

Wenn also mehrere Membervariablen voneinander abhängen, kannst du diese Abhängigkeiten innerhalb der Getter / Setter modellieren, anstatt es von Hand an jeder Stelle im Programm zu tun, wo schreibend auf die besagten Variablen zugegriffen wird.

...zur Antwort

Meinst du in den Speicher gemappte ELF-Binaries? Ja, das geht relativ leicht, ist aber gar nix für Einsteiger. Wenn ich mir deine bisherigen Fragen aber so ansehe, müsste es für dich allerdings durchaus machbar sein. (Für 99% aller anderen Mitleser hingegen vermutlich nicht ... hahaha) :)

Um Exploits von Rowhammer zu demonstrieren, mussten die Forscher ebenfalls Zeigeradressen in physische Speicherpositionen direkt auf dem Chip "übersetzen".

Für ein aktuelles 64-Bit Linux gilt, dass eine Zeigeradresse nicht nur ein oller Integer ist, sondern aus vielen Segmenten besteht. Die obersten 16 Bit sind immer alle gleich Null oder Eins, abhängig von Bit 47.

Es reicht also, wenn du dich auf die unteren 48 Bit konzentrierst, allerdings musst du dich hier mithilfe eines Kerneldebuggers durch mehrere Ebenen Paging, Bäume und andere Datenstrukturen durchhangeln, um letztendlich an die physische Adresse zu kommen. Im Grunde musst du auch das, was die MMU automatisch macht, per Hand nachfrickeln. :)

Dabei musst du Flags für Pagegrößen, Schlüssel für eine Art Baumstruktur, uvm. im Auge behalten.

Aber ja, es ist möglich! Wie genau, würde jetzt hier den Rahmen sprengen, aber im Buch "The Linux Programming Interface" ist das u. a. beschrieben ... neben vielen anderen Dingen, die du hier ab und zu so fragst:

https://www.amazon.de/Linux-Programming-Interface-System-Handbook/dp/1593272200/

Falls du dir noch nichts zu Weihnachten gewünscht hast, weißt du ja jetzt, was du haben willst. :)

Das Buch ist zwar von 2010, aber da im Gegensatz zu Windows bei Linux die Low-Level-APIs stabil sind, ist das Buch für ein Linux aus den 90ern genauso gültig, wie es für ein Linux in 10 Jahren sein wird. (Mit kleinen Abschlägen von 1.xer und 4.xer Kerneln, aber das kannst du unter Ulk verbuchen!)

Wenn irgendwann mal genügend Neuerungen hinzu gekommen sind, wird der Autor eine neue Auflage verfassen ... bis dahin gibt es keine Quelle, die so detailliert und gut die Interna von Linux beschreibt. Manpages sind verglichen damit ungeordnete Zettel mit Kritzeleien. :)

Und auch wenn das Buch bei kleiner Schrift und dünnen Seiten recht fett ist, empfiehlt es sich, es Seite für Seite wirklich von vorne bis hinten durch zu arbeiten. Der Autor ist genial, und der Verlag gerade für Hacker-Literatur richtig gut. Verglichen damit sind "O'Reilly" und "Addison Wesley" Verlage mit Anfängerliteratur! :)

Also dann, viel Spaß! Falls du konkrete Fragen hast, frag ruhig, aber wie ich bereits schrieb: Dir hier jeden einzelnen Schritt der "Adressübersetzung" zu erklären würde den Rahmen sprengen!

Google mal nach der Funktionsweise der MMU, hangel dich von dort aus zum Zeigerlayout und dem Paging weiter. Damit wirst du ans Ziel kommen! Ein Blick in die "Intel® 64 and IA-32 Architectures Software Developer Manuals" wird dir ebenfalls helfen:

https://software.intel.com/en-us/articles/intel-sdm

Falls du das noch nicht hast, lade dir die kombinierte Version aller Volumes runter ... sind tausende von Seiten als PDF und viele PDF-Viewer sind damit überfordert, also denke nicht gleich, dass dein PDF-Betrachter abgestürzt ist, wenn du die PDF lädst ... das ist normal dass ein PDF-Betrachter hier erstmal ein Weilchen hängt. :)

Also dann ... viel Spaß! :)

...zur Antwort

Electron ist momentan ziemlich angesagt um unsichere Bloatware ... ähh ... Programme mit modernen UIs zu bauen. :)

Hippe Webdeveloper fahren da wohl voll drauf ab, vor allem da man es auch mit Angular und noch 10 weiteren Layern Mist bedecken kann, aber alle anderen Entwickler kriegen - entschuldige die Wortwahl - das Kotzen. Vor allem, wenn du dir mal überlegst, wie viel Müll in einen Topf geworfen wird, in der Hoffnung, dass es immer besser wird ... bääähhh :)

Aber egal: Google dazu mal nach "Electron.Net".

Leute, die heute auf Electron stehen, gehören zur selben Kategorie derer, die früher Java-Applets und Flash-Inhalte geil fanden. Aber naja, im Nachhinein ist man immer schlauer ... auch wenn es 10 bis 15 Jahre dauern wird. :)

...zur Antwort

Grundsätzlich kannst du mit nahezu jeder modernen Programmiersprache GUIs bauen, da fast alle mindestens irgendwelche Bindings bzw. ganze Frameworks dafür bereit stellen.

Ich persönlich mag C++ zwar viel mehr, und in Verbindung mit Qt hast du auch eine wirklich moderne Möglichkeit, sehr schnell effiziente und komplexe Software zu bauen, aber C# ist für Einsteiger viiieeel einfacher zu erlernen, und da du ja sowieso nur auf Windows arbeiten willst, bietet dir Visual-Studio ja schon alles, was du benötigst.

Ansonsten gehen natürlich auch die Sprachen der Fanboy-Antworten: VB.net und Java.

Aber wie gesagt ... eigentlich geht jede Sprache.

Wenn du zwischen C# und C++ wählen musst, dann ist C# Einsteigerfreundlicher, C++ aber mächtiger. Da du für GUIs aber kaum etwas von der Mächtigkeit von C++ benötigst, solltest du mit C# locker klar kommen. :)

...zur Antwort

Boah, sind Arduino-Programme tatsächlich so dermaßen aufgeblasen?

Das, was dein Code macht, würde bei mir weit weniger als 50 Byte fressen, wenn ich es direkt für einen ATtiny13 in C schreiben würde ... aber vermutlich käme ich noch unter 30 Byte.

Was zum Teufel macht den das Arduino-Framework um den Code so dermaßen aufzublähen? Bist du sicher, dass das normal ist? :)

...zur Antwort

Willst du nur den nackten Speicherplatz deiner ganzen tmpfsen anzeigen?

Dann lass doch grep komplett weg, wenn du schon mit awk arbeitest:

df -h | awk '/^tmpfs/ {print $5}'

Das gibt nur Feld 5 aus, und zwar nur in Zeilen, die mit "tmpfs" anfangen. :)

...zur Antwort