Archive for 22 mayo 2009

Alternativas a GNU/Linux

mayo 22, 2009

Recibí un comentario de Pedro en la página “Acerca de…” de este blog, y este post es en respuesta a su comentario ya que creo que alguien más puede tener la misma inquietud.

Es cierto que existen otros sistemas operativos y algunos seguramente mejores que GNU/Linux, por ejemplo en mi opinión, los BSD (FreeBSD, NetDBSD, etc.) son un poco mas robustos y eficientes que GNU/Linux.
El que un sistema operativo sea mejor que otro tiene una parte subjetiva, ya que hay que tomar en cuenta el tipo de computadora para la que estemos seleccionando el sistema operativo y también la función que desempeñará la computadora en cuestión.

Por tipo de computadora no me refiero a el procesador, sino a la clasificación, es decir PC’s (notese que en esta categoría entran también las Mac, ya que PC significa computadora personal y la Mac es una computadora personal), mini computadoras (por ejemplo la AS/400), estaciones de trabajo (como la RS/6000), mainframes (como la S/390), etc.
Cuando digo “la función que desempeñará la computadora” me refiero a tomar en cuenta si es una PC que usará un usuario final para navegar en internet, chatear, escuchar música y enviar y recibir mails o si será un servidor que funcionará como servidor web, servidor de correo, servidor FTP, o cualquier otro uso.

Entonces tenemos que para computadoras personales no hay muchos sistemas operativos que valgan la pena entre los cuales elegir, por ejemplo aparte de GNU/Linux tenemos los basados en BSD (FreeBSD, NetBSD, OpenBSD, y los derivados de estos 3 como PC-BSD, DesktopBSD, DragonFly BSD, etc.). Dentro de los que no son software libre ni open source, tenemos a Mac OS X, el sistema operativo de las Mac, que está basado en Darwin. Aunque Mac OS X no es software libre ni open source, y mucho menos gratuito, Darwin si es open source (http://developer.apple.com/Darwin).

Ahora, para quienes tienen PC’s “antiguas” con procesadores desde 8088 con 640k de RAM existe FreeDOS que es una alternativa a los DOS que no son open source, como MS-DOS de Microsoft, DRDOS de la desaparecida Digital Research, PC-DOS de IBM, etc. Para aquellas PC’s con 512k de RAM o menos, probablemente sirva el sitema operativo CP/M que usaban las Apple IIe y pueden descargar desde aqui http://www.cpm.z80.de/ (lean la licencia antes de usarlo)

Como alternativas para servidores (además de GNU/Linux y los BSD) existen varias versiones de Unix como Solaris cuya versión open source es Open Solaris, AIX de IBM, y otros.

Para las mini computadoras, estaciones de trabajo, etc. existen otros sistemas operativos, la mayoría se puede decir que fueron creados para un modelo específico de computadora, como el OS/400 para las AS/400, el OS/390 para las S/370 y S/390, que antes usaban el sistema operativo MVS. Las computadoras VAX utilizan el sistema operativo OpenVMS, antes llamado sólo VMS.

Espero esto sirva como referencia y ya será iniciativa de cada quien investigar más al respecto.

Anuncios

Renombrar archivos usando C++ en GNU/Linux

mayo 8, 2009

En GNU/Linux (en los sistemas operativos tipo Unix en general, incluidos FreeBSD, etc.) no es recomendable manejar nombres de archivo que contengan espacios.

Puede darse el caso de que copiemos desde otro sistema operativo archivos que contienen espacios en su nombre, a nuestra máquina con GNU/Linux. Entónces, ¿qué hacer en esos casos?

Efectivamente… “lo recomendable” es renombrarlos para eliminar los espacios que contiene el nombre de archivo. Como puede ser una cantidad considerable de archivos, nos tomaría mucho tiempo ir renombrando archivo por archivo.

Exísten diferentes opciones para automatizar esa tarea, haciendo un script para bash, utilizando AWK y muchas otras soluciones.

A continuación un programa en C++ al que le podemos enviar una lista de directorios para que renombre todos los archivos que se encuentran en ellos eliminando los espacios del nombre de archivo.

/****************************************
* Archivo: renombrar_archivos.cpp               
* Autor  : SALOMON RINCON TORRES       
* Fecha  : 08/05/2009 (dd/mm/yyyy)
*/

#include
#include
#include
#include

using namespace std;

string QuitaEspacios(string s_cadena)
{
 string s_aux;

 for (int i_pos = 0; i_pos < s_cadena.length(); i_pos++)      {        if (s_cadena[i_pos] != ' ')            s_aux += s_cadena[i_pos];      }  return s_aux; } int main (int argc, char *argv[]) {  DIR *dirh;  struct dirent *dirp;  string s_dir, s_nombre, s_nuevonombre;  int i_renombrados = 0, i_ok = 0, i_fallos = 0; for(int i = 1; i < argc; i++) { s_dir = argv[i]; i_renombrados = 0; i_ok = 0; i_fallos = 0; cout << "******************** Directorio \"" << s_dir << "\" ********************\n" << endl; if ((dirh = opendir(s_dir.c_str())) == NULL) perror("No se pudo accesar al directorio "); else { for (dirp = readdir(dirh); dirp != NULL; dirp = readdir(dirh)) { s_nombre = dirp->d_name;

// Checamo que no sea el directorio . o ..
if (s_nombre != “.” && s_nombre != “..”)
{
cout << "Archivo: " << s_nombre << endl; // Si el nombre del archivo tiene un espacio, lo renombramos if (s_nombre.find(" ") != string::npos) {            s_nuevonombre = QuitaEspacios(s_nombre); if (rename((s_dir+"/"+dirp->d_name).c_str(), (s_dir+”/”+s_nuevonombre).c_str()) == 0)
{
i_renombrados++;
cout << "   === Renombrado como: " << s_nuevonombre.c_str() << endl; } else { i_fallos++; perror("No se pudo renombrar"); } } /* if */ else { i_ok++; cout << "OK\n"; } } /* if */ } /* for */ closedir(dirh); cout << endl; cout << "--- Archivos renombrados: " << i_renombrados << endl; cout << "--- Archivos OK: " << i_ok << endl; cout << "--- Archivos que no se pudieron renombrar: " << i_fallos << endl << endl; } /* else */ } /* for */ return 0; } [/sourcecode]