UNIXwork

Tags

c unix dav shell linux xattr solaris links x11 java rant webdav fun gnome apple sync wtf oracle ldap network xnedit windows analytics macos benchmark curl apache bsd graalvm mac virtualbox arm zfs rhel microsoft tomcat freebsd hardware sparc

Large File IO

28. Mai 2015

Betrachten wir zunächst folgendes Beispielprogramm:

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

int main(int argc, char **argv) {
	printf("sizeof(void*) = %d\n", sizeof(void*));
	printf("sizeof(off_t) = %d\n", sizeof(off_t));
	
	FILE *file = fopen("testfile", "w");
	if(!file) return -1;
	
	size_t len = 1024*1024*256;
	char *buf = malloc(len);
	
	int count = 0;
	while(fwrite(buf, 1, len, file) == len) {
		count++;
		if(count >= 10)
			break;
	}
	printf("count: %d\n", count);
	
	fclose(file);
	return 0;
}

Das Programm öffnet eine Datei und schreibt dann 10 mal einen 256MB großen Block. Insgesammt sollte eine 2,5GB große Datei rauskommen. Kompilieren wir das Programm nun im 32bit Modus mit cc -m32 -o test test.c wird die Schleife nicht 10 mal ausgeführt, denn vorher überschreitet die Datei eine Größe von 2GB. Die APIs können auf Grund des 32bit Limits nicht mit größeren Dateien umgehen.

Es gibt jedoch ein Large File Interface für 32bit Anwendungen, damit diese auch mit größeren Dateien umgehen können. Dazu stehen neben den typischen Funktionen, wie z.B. open, fopen, stat, lseek, fseek, ftell, usw., 64bit fähige Funktionen zur Verfügung, deren Name einfach nur um ein 64 erweitert wurde (open64, fopen64, ...). Außerdem gibt es zusätzliche Typen wie off64_t.

Jetzt wäre es etwas unschön, müsste man immer diese 64 bit fähigen Funktionen direkt verwenden, und daher seinen ganzen Code anpassen. Doch definiert man _FILE_OFFSET_BITS=64 stehen unter den alten Namen die 64bit fähigen Funktionen bzw. Typen zur Verfügung. Damit ist off_t nun in 32bit Anwendungen 64bit groß und fopen wird transparent durch fopen64 ersetzt. Wir können also das obere Beispiel einfach mit cc -D_FILE_OFFSET_BITS=64 -o test test.c kompilieren und es verhält sich dann wie sein 64bit Pendant.

Das ganze sollte unter jedem unixoiden Betriebsystem funktionieren. Unter OS X sind die IO-Funktionen allerdings standardmäßig schon im 64bit-Modus und die *64-Funktionen existieren dort nicht.

Siehe auch: lf64(5)

SSHA-Hashes

17. Mai 2015

SSHA ist ein Format für SHA-1 Hashes mit Salt und wird von manchen Programmen genutzt um Passwort-Hashes zu speichern. Hierfür wird zunächst ein Salt an das Passwort angehängt und davon ein SHA-1-Hash gebildet. Danach wird an den Hash nochmal das Salt angehängt und das ganze mit base64 kodiert.

Hier ein kleines Script, das ein Passwort als Parameter erwartet und daraus ein SSHA-Hash generiert.

#!/bin/bash

saltlen=8

salt="$(cat /dev/urandom | head -c $saltlen)"
pwsalt=$1$salt

pwhash="$(head -c -1 << EOF | openssl dgst -sha1 -binary
$pwsalt
EOF
)"

ssha="$(head -c -1 << EOF | base64
$pwhash$salt
EOF
)"

ssha="{SSHA}$ssha"
echo $ssha

Linkdump

14. Mai 2015

Visual Studio Code für Linux

30. April 2015

Microsoft sorgt neuerdings öfter mal für Überraschungen. Diesmal veröffentlichen sie einen Texteditor für Linux und OS X, der trotz seines Namens nichts mit der Visual Studio IDE zutun hat.

Unter Scientific Linux 7 ließ sich Visual Studio Code problemlos starten. Der Editor setzt auf Chromium auf, was ihn zwar halbwegs plattformunabhängig macht, jedoch fühlt sich das Userinterface teilweise träge an. Zumindestens die Menüs werden etwas langsam gerendert.

Vom Funktionsumfang ist Visual Studio Code recht gut ausgestattet. Syntaxhighlighting für viele Sprachen, ein bisschen Codecompletion, Integration von git und Debugging für Mono- und Node-Anwendungen. Interessant ist auch die Markdown-Preview-Funktion, die bei mir aber nur funktionierte, wenn die Datei auf .md endete. Für C/C++ kann der Editor aber bei weitem nicht mit einer IDE mithalten.

Visual Studio Code kann man hier downloaden.

Raspberry Pi 2

02. Februar 2015

Golem berichtet, dass ab sofort das Raspberry Pi 2 erhältlich ist. Die neue Version hat vier Cortex A7 Kerne und 1 GByte RAM. Der Rest ist weitgehend wie beim Raspberry Pi B+, auch der Grafikkern ist der gleiche.

Insgesammt eine sehr erfreuliche Nachricht. Die Leistung des Raspberry Pi war deutlich schwächer im Vergleich zu den ganzen Konkurrenten. Besonders der größere Arbeitsspeicher dürfte einige neue Anwendungsfelder eröffnen.

Zurück Weiter