elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / [DUDA] Comprobar si un número es ondulado en: 15 Diciembre 2010, 00:22 am
En primer lugar, ¿Qué es un número ondulado?

Un entero positivo es ondulado si sus dígitos se van repitiendo en la forma ababab.... Sólo hay dos dígitos (a y b) que se repiten.
Casos especiales:
 - Todos los enteros menores estrictos que 100 son ondulados.
 - Los enteros de la forma ababa son ondulados. Es decir, lo importante es que se vayan alternando los dos dígitos.

Ejemplos de números ondulados: 2, 82, 737, 1010, 10101, 222, 5555
Ejemplos de números NO ondulados: 1987, 827, 827827, 1001, 955

Pues resulta que no me aclaro a como hacerlo.

Resulta que acabo de entrar en la universidad en el grado de informática y hemos dado los temas 1 y 2, los cuales no enseñan ni vectores, ni ninguna herramienta más allá de las simples operaciones, condiciones y bucles.

Entonces, ¿Cómo podría decir si un número es ondulado?. Hasta aquí lo que he podido hacer.

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7. int numero;
  8. int copiaNumero;
  9. int cifra, cifraAux;
  10. cin >> numero;
  11.  
  12. if ( numero < 100 )
  13. {
  14. cout << "RESULTADO = SI" << endl;
  15. }
  16. else
  17. {
  18. copiaNumero = numero;
  19.  
  20. while ( (copiaNumero / 10) != 0 )
  21. {
  22. // Guarda la cifra leida
  23. cifra = copiaNumero % 10;
  24. copiaNumero = copiaNumero / 10;
  25.  
  26.  
  27. //cifra = cifra * 10 + cifra;
  28.  
  29. /* HASTA AQUI */
  30.  
  31. }
  32. }
  33.  
  34. system( "pause" );
  35. return 0;
  36. }
  37.  

¿Alguien puede ayudarme? No pido que escribais el código, sólo pido una idea, un empujon para aclararme como podría hacerlo.

Gracias!

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7. int numero;
  8. int copiaNumero;
  9. int cifra1, cifra2;
  10. int numeroCifras;
  11. bool esOndulado = false;
  12. bool penultimaCifra = false, salida = false;
  13.  
  14. cin >> numero;
  15.  
  16. if ( numero < 100 )
  17. {
  18. cout << "RESULTADO = SI" << endl;
  19. return 0;
  20. }
  21. else
  22. {
  23. numeroCifras = 1;
  24. copiaNumero = numero;
  25.  
  26. while ( !salida )
  27. {
  28. if ( numeroCifras == 1 )
  29. {
  30. cifra1 = copiaNumero % 10;
  31. }
  32. else if ( numeroCifras == 2 )
  33. {
  34. cifra2 = copiaNumero % 10;
  35. }
  36. else
  37. {
  38. if ( numeroCifras % 2 == 0 )
  39. {
  40. if ( cifra2 == (copiaNumero%10) )
  41. esOndulado = true;
  42. else
  43. esOndulado = false;
  44. }
  45. else
  46. {
  47. if ( cifra1 == (copiaNumero%10) )
  48. esOndulado = true;
  49. else
  50. esOndulado = false;
  51. }
  52. }
  53.  
  54. copiaNumero = copiaNumero / 10;
  55. numeroCifras++;
  56.  
  57. if ( penultimaCifra )
  58. salida = true;
  59.  
  60. if ( copiaNumero / 10 == 0 )
  61. penultimaCifra = true;
  62.  
  63. }
  64. }
  65.  
  66. if ( esOndulado )
  67. cout << "Es ondulado" << endl;
  68. else
  69. cout << "No es ondulado" << endl;
  70.  
  71. system( "pause" );
  72. return 0;
  73. }
  74.  
  75.  

Ese es el código que final que he conseguido, funciona, aunque posiblemente se pueda hacer mas reducido.

Gracias!
2  Programación / Programación C/C++ / Librería sobre SDL en: 6 Octubre 2010, 18:05 pm
Bueno, aquí dejo una parte de una librería sobre SDL para acelerar el proceso de crear una aplicación con SDL. Es un poco patatera y no tiene demasiadas cosas. Espero que sirva de algo y de pie a seguirla.

SVideo.h
Código
  1.  
  2. /**
  3. SVideo.h
  4. **/
  5.  
  6. #ifndef __S_VIDEO_H__
  7. #define __S_VIDEO_H__
  8.  
  9. #define SVIDEO_DEBUG
  10.  
  11. #include <SDL/SDL.h>
  12. #include <SDL/SDL_image.h>
  13. #include <SDL/SDL_ttf.h>
  14.  
  15. #ifdef SVIDEO_DEBUG
  16. #include <iostream>
  17. #endif
  18.  
  19. #include <vector>
  20. #include <string>
  21.  
  22. class SVideo
  23. {
  24. public :
  25. SVideo(int width, int height, int depth, bool fullscreen, bool initialize = true);
  26. ~SVideo();
  27.  
  28. // Gestión de fuentes
  29. int CreateFont(std::string font, int size);
  30. static int GetWidth(TTF_Font *font, std::string text);
  31. static int GetHeight(TTF_Font *font, std::string text);
  32. void DrawText(TTF_Font *font, std::string text, SDL_Color color, int x, int y);
  33. TTF_Font *GetFont(unsigned int index);
  34.  
  35. // Gestión de superficies
  36. int CreateSurface(std::string image);
  37. void DrawSurface(SDL_Surface *surface, int x, int y);
  38. void DrawSurface(SDL_Surface *surface, SDL_Rect rect);
  39. SDL_Surface *GetSurface(unsigned int index);
  40.  
  41. // Gestión del sistema de video
  42. void FlipScreen();
  43. void Wait(int milliseconds);
  44. void CleanScreen(SDL_Color color);
  45. int Initialize(int width, int height, int depth, bool fullscreen);
  46.  
  47. bool IsInitialized() const;
  48. SDL_Surface *GetScreen();
  49.  
  50. private :
  51. SDL_Surface *m_screen;
  52. SDL_Rect m_rectScreen;
  53. bool m_initialized;
  54.  
  55. // Fuentes
  56. std::vector<TTF_Font *> m_font;
  57.  
  58. // Superficies
  59. std::vector<SDL_Surface *> m_surface;
  60. };
  61.  
  62. #endif /* __S_VIDEO_H__ */
  63.  
  64.  

SVideo.cpp
Código
  1.  
  2. #include "SVideo.h"
  3.  
  4. SVideo::SVideo(int width, int height, int depth, bool fullscreen, bool initialize /*= true*/)
  5. : m_screen(NULL)
  6. , m_initialized(false)
  7. {
  8. if ( initialize )
  9. {
  10. if ( Initialize(width, height, depth, fullscreen) < 0 )
  11. {
  12. #ifdef SVIDEO_DEBUG
  13. std::cerr << "SVideo::SVideo() -> SDL Error: " << SDL_GetError() << "." << std::endl;
  14. #endif
  15.  
  16. return;
  17. }
  18. }
  19. }
  20.  
  21. SVideo::~SVideo()
  22. {
  23. for ( unsigned int i = 0; i < m_font.size(); i++ )
  24. {
  25. if ( m_font[i] )
  26. {
  27. TTF_CloseFont( m_font[i] );
  28. }
  29. }
  30.  
  31. for ( unsigned int i = 0; i < m_surface.size(); i++ )
  32. {
  33. if ( m_surface[i] )
  34. {
  35. SDL_FreeSurface( m_surface[i] );
  36. }
  37. }
  38.  
  39. if ( m_screen )
  40. {
  41. SDL_FreeSurface(m_screen);
  42. }
  43. }
  44.  
  45. /**
  46. A partir de una cadena que indica el nombre de la fuente
  47. y el tamaño, crea un TTF_Font en la clase SVideo.
  48. Devuelve el índice de la fuente guardada en el vector.
  49. Devuelve -1 si a habido un error.
  50. @font: Cadena de la ruta de la fuente.
  51. @size: Tamaño de la fuente.
  52. **/
  53. int SVideo::CreateFont(std::string font, int size)
  54. {
  55. m_font.push_back(TTF_OpenFont(font.c_str(), size));
  56.  
  57. unsigned int index = m_font.size() - 1;
  58.  
  59. if ( m_font[index] == NULL )
  60. {
  61. // No se creó bien, se borra y devuelve error.
  62. #ifdef SVIDEO_DEBUG
  63. std::cerr << "SVideo::CreateFont() -> SDL Error: " << SDL_GetError() << "." << std::endl;
  64. #endif
  65. m_font.erase(m_font.begin() + index);
  66. return -1;
  67. }
  68.  
  69. // Si se crea bien, se devuelve su índice.
  70. return index;
  71. }
  72.  
  73. /**
  74. Devuelve el ancho en píxeles de un texto.
  75. @font: Fuente de tipo TTF_Font.
  76. @text: Texto que se quiere medir.
  77. **/
  78. int SVideo::GetWidth(TTF_Font *font, std::string text)
  79. {
  80. if ( font == NULL )
  81. {
  82. return -1;
  83. }
  84.  
  85. int w, h;
  86. TTF_SizeUTF8(font, text.c_str(), &w, &h);
  87.  
  88. return w;
  89. }
  90.  
  91. /**
  92. Devuelve el alto en píxeles de un texto.
  93. Devuelve -1 si hay fallo.
  94. @font: Fuente de tipo TTF_Font.
  95. @text: Texto que se quiere medir.
  96. **/
  97. int SVideo::GetHeight(TTF_Font *font, std::string text)
  98. {
  99. if ( font == NULL )
  100. {
  101. return -1;
  102. }
  103.  
  104. int w, h;
  105. TTF_SizeUTF8(font, text.c_str(), &w, &h);
  106.  
  107. return h;
  108. }
  109.  
  110. /**
  111. Dibuja un texto.
  112. @font: Fuente de tipo TTF_Font.
  113. @text: Texto que se quiere escribir.
  114. @color: Color del texto
  115. @x: Posición horizontal.
  116. @y: Posición vertical.
  117. **/
  118. void SVideo::DrawText(TTF_Font *font, std::string text, SDL_Color color, int x, int y)
  119. {
  120. if ( font == NULL )
  121. {
  122. return;
  123. }
  124.  
  125. SDL_Surface *textSurface;
  126.  
  127. textSurface = TTF_RenderText_Blended(font, text.c_str(), color);
  128.  
  129. SDL_Rect dest;
  130.  
  131. dest.x = x;
  132. dest.y = y;
  133. dest.h = textSurface->h;
  134. dest.w = textSurface->w;
  135.  
  136. if (SDL_BlitSurface(textSurface, NULL, m_screen, &dest) < 0 )
  137. {
  138. #ifdef SVIDEO_DEBUG
  139. std::cerr << "SVideo::DrawText() -> SDL Error: " << SDL_GetError() << "." << std::endl;
  140. #endif
  141. return;
  142. }
  143.  
  144. SDL_FreeSurface(textSurface);
  145. }
  146.  
  147. /**
  148. Devuelve una fuente guardada en el vector.
  149. @index: Índice de la fuente en el vector.
  150. **/
  151. TTF_Font *SVideo::GetFont(unsigned int index)
  152. {
  153. if ( index < m_font.size() )
  154. {
  155. return m_font[index];
  156. }
  157.  
  158. return NULL;
  159. }
  160.  
  161. /**
  162. crea una superficie en el vector de superficies.
  163. Devuelve el índice de la superficie.
  164. @image: Ruta de la imagen.
  165. **/
  166. int SVideo::CreateSurface(std::string image)
  167. {
  168. m_surface.push_back(IMG_Load(image.c_str()));
  169.  
  170. unsigned int index = m_surface.size() - 1;
  171.  
  172. if ( m_surface[index] == NULL )
  173. {
  174. // No se creó bien, se borra y devuelve error.
  175. #ifdef SVIDEO_DEBUG
  176. std::cerr << "SVideo::CreateSurface() -> SDL Error: " << SDL_GetError() << "." << std::endl;
  177. #endif
  178. m_surface.erase(m_surface.begin() + index);
  179. return -1;
  180. }
  181.  
  182. // Si se crea bien, se devuelve su índice.
  183. return index;
  184. }
  185.  
  186. /**
  187. Dibuja una superficie en la pantalla principal.
  188. @surface: Superficie a dibujar.
  189. @x: Posición horizontal.
  190. @y: Posición vertical.
  191. **/
  192. void SVideo::DrawSurface(SDL_Surface *surface, int x, int y)
  193. {
  194. SDL_Rect _rect = { x, y, surface->w, surface->h };
  195. SDL_BlitSurface(surface, NULL, m_screen, &_rect);
  196. }
  197.  
  198. /**
  199. Dibuja una superficie en la pantalla principal.
  200. @surface: Superficie a dibujar.
  201. @rect: Rectángulo
  202. **/
  203. void SVideo::DrawSurface(SDL_Surface *surface, SDL_Rect rect)
  204. {
  205. SDL_BlitSurface(surface, NULL, m_screen, &rect);
  206. }
  207.  
  208. /**
  209. Devuelve una superficie creada.
  210. @index: Índice de la superficie en el vector.
  211. **/
  212. SDL_Surface *SVideo::GetSurface(unsigned int index)
  213. {
  214. if ( index < m_surface.size() )
  215. {
  216. return m_surface[index];
  217. }
  218.  
  219. return NULL;
  220. }
  221.  
  222. /**
  223. Muestra el buffer escondido.
  224. **/
  225. void SVideo::FlipScreen()
  226. {
  227. SDL_Flip(m_screen);
  228. }
  229.  
  230. /**
  231. Hace una pausa.
  232. @milliseconds: Milisegundos de pausa.
  233. **/
  234. void SVideo::Wait(int milliseconds)
  235. {
  236. SDL_Delay(milliseconds);
  237. }
  238.  
  239. /**
  240. Limpia la pantalla con un color.
  241. @color: Color de borrado.
  242. **/
  243. void SVideo::CleanScreen(SDL_Color color)
  244. {
  245. SDL_FillRect(m_screen, &m_rectScreen, SDL_MapRGB(m_screen->format, color.r, color.g, color.b));
  246. }
  247.  
  248. /**
  249. Inicia todo el sistema de video.
  250.  
  251. Devuelve:
  252. < 0 Si hay error.
  253. 0 Si ha ido bien.
  254. **/
  255. int SVideo::Initialize(int width, int height, int depth, bool fullscreen)
  256. {
  257. m_initialized = false;
  258.  
  259. /** Video **/
  260. if ( SDL_Init(SDL_INIT_VIDEO) == -1 )
  261. {
  262. return -1;
  263. }
  264. atexit(SDL_Quit);
  265.  
  266. if ( fullscreen ) m_screen = SDL_SetVideoMode(width, height, depth, SDL_SWSURFACE | SDL_DOUBLEBUF | SDL_FULLSCREEN);
  267. else m_screen = SDL_SetVideoMode(width, height, depth, SDL_SWSURFACE | SDL_DOUBLEBUF);
  268.  
  269. if (m_screen == NULL)
  270. {
  271. return -2;
  272. }
  273.  
  274. m_rectScreen.x = 0;
  275. m_rectScreen.y = 0;
  276. m_rectScreen.w = width;
  277. m_rectScreen.h = height;
  278.  
  279. /** Textos **/
  280. if (TTF_Init() == -1)
  281. {
  282. return -3;
  283. }
  284. atexit(TTF_Quit);
  285.  
  286. m_initialized = true;
  287.  
  288. return 0;
  289. }
  290.  
  291. /**
  292. Devuelve si el sistema está inicializado.
  293. **/
  294. bool SVideo::IsInitialized() const
  295. {
  296. return ( m_screen != NULL && m_initialized );
  297. }
  298.  
  299. /**
  300. Devuelve la pantalla principal.
  301. **/
  302. SDL_Surface *SVideo::GetScreen()
  303. {
  304. return m_screen;
  305. }
  306.  
  307.  

Por supuesto le falta infinidad de cosas. Sugerencias, etc.

Aplicación con SDL pura.
Código
  1.  
  2. #include <SDL/SDL.h>
  3. #include <SDL/SDL_image.h>
  4. #include <SDL/SDL_ttf.h>
  5.  
  6. using namespace std;
  7.  
  8. int main(int arc, char *argv[])
  9. {
  10. SDL_Event evento;
  11. bool salida = false;
  12. SDL_Rect rectPantalla;
  13. SDL_Surface *pantalla;
  14.  
  15. SDL_Color _blanco = { 255, 255, 255 };
  16. SDL_Color _negro = { 0, 0, 0 };
  17.  
  18. if ( SDL_Init(SDL_INIT_VIDEO) == -1 )
  19. {
  20. return -1;
  21. }
  22. atexit(SDL_Quit);
  23.  
  24. if ((pantalla = SDL_SetVideoMode(600, 200, 16, SDL_SWSURFACE | SDL_DOUBLEBUF)) == NULL)
  25. {
  26. return -1;
  27. }
  28.  
  29. rectPantalla.x = 0;
  30. rectPantalla.y = 0;
  31. rectPantalla.w = 600;
  32. rectPantalla.h = 200;
  33.  
  34. if (TTF_Init() == -1)
  35. {
  36. return -1;
  37. }
  38. atexit(TTF_Quit);
  39.  
  40. TTF_Font *miFuente = TTF_OpenFont("verdana.ttf", 50);
  41. if ( miFuente == NULL )
  42. {
  43. return -1;
  44. }
  45.  
  46. SDL_Surface *miGrafico = IMG_Load("grafico.png");
  47. if ( miGrafico == NULL )
  48. {
  49. return -1;
  50. }
  51.  
  52. while ( !salida )
  53. {
  54. while (SDL_PollEvent(&evento))
  55. {
  56. if ( evento.type == SDL_QUIT ) salida = true;
  57. }
  58.  
  59. int w, h;
  60. TTF_SizeUTF8(miFuente, "Mi Texto.", &w, &h);
  61.  
  62. SDL_Surface *textoSurface = TTF_RenderText_Blended(miFuente, "Mi Texto.", _blanco);
  63.  
  64. SDL_Rect rectTexto;
  65.  
  66. rectTexto.x = 600 / 2 - w / 2;
  67. rectTexto.y = 20;
  68. rectTexto.h = textoSurface->h;
  69. rectTexto.w = textoSurface->w;
  70.  
  71. SDL_BlitSurface(textoSurface, NULL, pantalla, &rectTexto);
  72. SDL_FreeSurface(textoSurface);
  73.  
  74. SDL_Rect rectGrafico;
  75. rectGrafico.x = 3;
  76. rectGrafico.y = 3;
  77. rectGrafico.w = miGrafico->w;
  78. rectGrafico.h = miGrafico->h;
  79.  
  80. SDL_BlitSurface(miGrafico, NULL, pantalla, &rectGrafico);
  81.  
  82. SDL_Flip(pantalla);
  83. SDL_Delay(30);
  84. }
  85.  
  86. TTF_CloseFont(miFuente);
  87. SDL_FreeSurface(miGrafico);
  88. SDL_FreeSurface(pantalla);
  89.  
  90. return EXIT_SUCCESS;
  91.  
  92.  


Aplicación con SVideo
Código
  1.  
  2. #include "SVideo.h"
  3.  
  4. using namespace std;
  5. typedef int FUENTE;
  6. typedef int GRAFICO;
  7.  
  8. int main(int arc, char *argv[])
  9. {
  10. SDL_Event evento;
  11. bool salida = false;
  12.  
  13. SDL_Color _blanco = { 255, 255, 255 };
  14. SDL_Color _negro = { 0, 0, 0 };
  15.  
  16. SVideo *video = new SVideo(600, 200, 16, false);
  17.  
  18. if ( !video->IsInitialized() )
  19. {
  20. std::cout << "Error iniciando." << std::endl;
  21. return -1;
  22. }
  23.  
  24. FUENTE miFuente;
  25. if ((miFuente = video->CreateFont("verdana.ttf", 50)) == -1)
  26. {
  27. std::cout << "Error creando fuente." << std::endl;
  28. delete video;
  29. return -1;
  30. }
  31.  
  32. GRAFICO miGrafico;
  33. if ((miGrafico = video->CreateSurface("grafico.png")) == -1)
  34. {
  35. std::cout << "Error creando gráfico." << std::endl;
  36. delete video;
  37. return -1;
  38. }
  39.  
  40. while ( !salida )
  41. {
  42. while (SDL_PollEvent(&evento))
  43. {
  44. if ( evento.type == SDL_QUIT ) salida = true;
  45. }
  46.  
  47. video->DrawText(video->GetFont(miFuente), "Mi Texto.", _blanco, (600 / 2)-(video->GetWidth(video->GetFont(miFuente), "Mi Texto.") / 2), 20);
  48. video->DrawSurface(video->GetSurface(miGrafico), 3, 3);
  49. video->FlipScreen();
  50. video->Wait(30);
  51. }
  52.  
  53. delete video;
  54.  
  55. return EXIT_SUCCESS;
  56. }
  57.  
  58.  
3  Programación / Programación C/C++ / SDL y la CPU en: 5 Octubre 2010, 12:38 pm
Me imagino que muchos conocerán SDL. Esa librería para hacer juegos (www.libsdl.org/).

Pues bien, llevo usándola un tiempo y he conseguido hacer algunas cosillas con ella, pero siempre tengo el mismo problema e internet no ha conseguido subsanarlo. El problema es el consumo de la CPU, como bien dice el título.

Dependiendo de la aplicación que esté haciendo, puede llegar a consumir entre 5% y 40% (aunque suele rondar el 30%) de los recursos de la CPU. Según he leído en múltiples foros y blogs, el problema reside en el tiempo de espera que hay que darle entre loop y loop. Hay algunos métodos estándar para hacer una pausa ligera y a la vez reducir considerablemente el consumo, pero por alguna extraña razón, en mis aplicaciones no funcionan esos métodos, o la pausa entre loop y loop es gigante, y por consiguiente el consumo es ínfimo o la pausa es pequeña y por tanto, el consumo es enorme...

Sin embargo, he visto aplicaciones desarrolladas con SDL donde no consumen nada, y las pausas esas anteriormente citadas ni se notan. Por tanto...

¿Qué estoy haciendo mal?

Muchas gracias. Espero haberme explicado bien.
 
4  Programación / Programación C/C++ / Números Aleatorios en: 2 Agosto 2010, 14:47 pm
Me gustaría generar números aleatorios. Todos los manuales para crear números aleatorios utilizan la hora y fecha actual como semilla aleatoria. ¿Alguien puede explicarme como funciona esa semilla?¿Son realmente aleatorios los números que se generan a partir de esa semilla?Si no son ¿Se puede hacer de alguna manera para que los numeros generados tengan el 50% de probabilidad (si son dos), (33.3% si son tres) ,etc.?

Si quiero generar números aleatorios entre 0 y 2 ambos inclusive:
Al 0 se le da 33.3% de probabilidad
Al 1 otro 33.3%
Al 2 otro 33.3%

¿Me explico?
5  Sistemas Operativos / GNU/Linux / apache2 y permisos en: 14 Junio 2010, 21:52 pm
Ahora el problema me viene con los permisos...

Estoy haciendo un servidor de hospedaje como práctica y cuando agrego un usuario nuevo a la base de datos, se crea su carpeta, bien, esa carpeta el dueño es el usuario para poder subir archivos, borrarlos crear carpetas, etc... Sin embargo, también necesito que ese mismo directorio lo lean los usuarios externos, los que se conectan por medio un navegador (www-data), según tengo entendido...

¿Esto como lo hago?
Código:
chown -R www-data.usuario /directorio/raiz/del/usuario
chown -R usuario.www-data /directorio/raiz/del/usuario
chown -R 664 /directorio/raiz/del/usuario

¿O directamente estoy alejado de la solución?

Porque claro... El usuario dueño de la carpeta puede subir archivos, sin embargo nadie puede ver lo que sube...

Código:
Forbidden
You don't have permission to access /index.html on this server.


6  Sistemas Operativos / Windows / Quitar Privacidad de Cuenta en: 14 Junio 2010, 16:46 pm
El otro día se me ocurrió la fantástica idea de ponerle una contraseña a la cuenta de Windows que uso normalmente, y me hizo una pregunta... Algo así que si quería poner los datos de la cuenta privados para tener más seguridad, y como un tonto le dí a que sí... Ahora, despues de eso, no puedo compartir una carpeta normalmente, tengo que llevarla a MiPC > Documentos Compartidos... Además siempre están en modo Sólo Lectura y me preguntaba si es posible volver atrás... porque hacer la cuenta privada es fácil pero hacerla pública es dificil, paradogicamente... Me he pateado todos los apartados de MiPC > Administrar y no he encontrado nada, en Propiedades tampoco, en Panel de Control > Usuarios, nada de nada...

Gracias... Un pobre desesperado
7  Sistemas Operativos / GNU/Linux / useradd en: 14 Junio 2010, 10:39 am
Bueno, me preguntaba desde la orden useradd, como puedo añadir un usuario con un directorio personalizado y la contraseña, todo en la misma linea, ahora mismo lo hago así:

Código:
useradd miusuario --home /home/miusuario --password mipassword

Pero esto no funciona bien, la contraseña no la crea correctamente y nose por que, se que luego se puede cambiar con passwd, pero me interesa que sea en la misma linea y llamar a todo el procedimiento de crear el usuario de una vez.

Gracias.

Modificado:

O bueno, lo que necesito es generar esa orden desde un script, si no se puede agregar la contraseña en una misma linea, podría hacerlo de otra forma, creo el usuario useradd y luego le hago passwd, el problema es que es desde un script, y no se enviar texto cuando me pida la contraseña... No se si me explico...
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines