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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


  Mostrar Mensajes
Páginas: 1 2 [3]
21  Programación / Programación C/C++ / ¿Mejorar este código en C baja Ubuntu? en: 7 Agosto 2010, 16:28 pm
#include <stdio.h>

#include <string.h>

#include <stdlib.h>
#include <assert.h>
#include <pthread.h>
#include <limits.h>
#include <unistd.h>
#include <semaphore.h>
#include <sys/types.h>
#include <errno.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <time.h>
#include <dirent.h>

#define MAX_THREAD 1

#define BUFSIZE 4096

typedef struct {

   char* filein;

   char* palabra;

       pthread_mutex_t * wcs;

   char* myset;

   sem_t semaforo;

 }param;

void myRun(param lpParam);

void lock(pthread_mutex_t * cs);

void unlock(pthread_mutex_t * cs);

int elabora(sem_t semaforo, char* myset, char* fileOut);

int busquedaPalabra(char* path, char* palabra, sem_t sem, char* myset, pthread_mutex_t * wcs, sem_t semaforo);

void produceFileOut(char* fileOut, char* myset);

char *getPath(const char* filename);

int main (int argc, char* argv[]) {

   char* path = argv[1];

   char* palabra = argv[2];

   char* fileOut = argv[3];

   char* myset = " ";

   pthread_mutex_t * wcs;

   sem_t semaforo;

   pthread_mutex_init(&wcs,NULL);
   sem_init(&semaforo, MAX_THREAD, NULL);

   elabora(semaforo, myset, fileOut);

   sem_post(&semaforo);

   pthread_mutex_destroy(&wcs);

   return 0;

}

void lock(pthread_mutex_t * cs){

   pthread_mutex_lock(&cs);

}

void unlock(pthread_mutex_t * cs){

   pthread_mutex_unlock(&cs);

}

int elabora(sem_t semaforo, char* myset, char* fileOut) {

    int i;

   for(i=0; i < MAX_THREAD; i++ )
      wait(&semaforo);

   if(strlen(myset)==0)

           printf("La cadena a buscar no se encuentra en el directorio especificado \n");

   else

      produceFileOut(fileOut, myset);

   return 0;

}

int busquedaPalabra(char* path, char* palabra, sem_t sem, char* myset, pthread_mutex_t * wcs, sem_t semaforo) {

    pthread_t hthread;

    char *puntero;

    char* dirname=getPath(path);
    DIR *file1;

    struct stat statbuf;
    struct dirent *direntp;

    int fd=NULL;

    strcat(dirname,"\\*");

    direntp = readdir(file1);

    if(fd==NULL )

   return -1;
    stat(file1, &statbuf);

    while(readdir(file1)!=0) {

   if(statbuf.st_mode & S_IFDIR) {
      if((strcmp(direntp->d_name,".") != 0) && (strcmp(direntp->d_name,"..") != 0)) {

         char* subdir=dirname;

                   //size_t its=strlen(subdir);

                   //its--;

                   //puntero=(char *)malloc(its);

                   strcpy(puntero, subdir);

                   strcat(puntero, file1->cFileName);

         busquedaPalabra(puntero,palabra,sem,myset,wcs,semaforo);

                   free(puntero);

      }
   }

   else {

      char* nameF=dirname;

                size_t its=strlen(nameF);

               its--;

               puntero=(char*)malloc(its);

               strcpy(puntero, nameF);

               strcat(puntero, file1->cFileName);

      wait(&semaforo);

                param->filein=puntero;

               param->palabra=palabra;

               param->myset=myset;

               param->wcs=wcs;

               param->semaforo=&semaforo;
      pthread_create(hthread, NULL, myRun, (param)(param));

      pthread_kill(hthread);
   }   
    }

    closedir(fd);

    return 0;

}

void produceFileOut(char* fileOut, char* myset) {

   FILE *fout;

   fout = fopen (fileOut, "wt");

   fwrite(myset, strlen(myset)+1, 1, fout);

   fclose(fout);

}

char *getPath(const char* filename) {
    getcwd(filename,BUFSIZE);

}

void myRun(param lpParam) {

    param *pa=&lpParam;

    char* s;

    FILE *fin;

    char* ret;

    fin = fopen(pa->filein, "wt");
    s=strlen(pa->filein);

    while(getline(pa->palabra, s, fin)) {

       lock(&pa->wcs);

        ret=strcat(pa->myset, pa->filein);

          break;

    }

    unlock(&pa->wcs);

    fclose(fin);

    sem_destroy(&(pa->semaforo));

}

Gracias
22  Programación / Programación C/C++ / Re: Equivalencia de función WINAPI unsigned int WINAPI myRun en Windows con Ubuntu en: 7 Agosto 2010, 16:27 pm
Gracias.

He aprendido mucho
23  Programación / Programación C/C++ / Equivalencia de función WINAPI unsigned int WINAPI myRun en Windows con Ubuntu en: 5 Agosto 2010, 03:45 am
Hola,

escribí lo mejor que pude el siguiente programa en Windows:

Código
  1. #include <stdio.h>
  2.  
  3. #include <string.h>
  4.  
  5. #include <windows.h>
  6.  
  7. #include <process.h>
  8.  
  9. #include <direct.h>
  10.  
  11. #include <stdlib.h>
  12.  
  13. #include <ctype.h>
  14.  
  15. #include <conio.h>
  16.  
  17. #define MAX_THREAD 1
  18.  
  19. #define BUFSIZE 4096
  20.  
  21. #define WIN32_LEAN_AND_MEAN
  22.  
  23. typedef struct {
  24.  
  25. char* filein;
  26.  
  27. char* palabra;
  28.  
  29.    CRITICAL_SECTION * wcs;
  30.  
  31. char* myset;
  32.  
  33. HANDLE* semaforo;
  34.  
  35. }param;
  36.  
  37. extern unsigned int WINAPI myRun(LPVOID lpParam);
  38.  
  39. void lock(CRITICAL_SECTION * cs);
  40.  
  41. void unlock(CRITICAL_SECTION * cs);
  42.  
  43. int elabora(char* path, char* palabra, HANDLE semaforo, char* myset, char* fileOut);
  44.  
  45. int busquedaPalabra(char* path, char* palabra, HANDLE sem, char* myset, CRITICAL_SECTION * wcs, HANDLE* semaforo);
  46.  
  47. void produceFileOut(char* fileOut, char* myset);
  48.  
  49. char *getPath(const char* filename);
  50.  
  51. int main (int argc, char* argv[]) {
  52.  
  53.   char* path = argv[1];
  54.  
  55.   char* palabra = argv[2];
  56.  
  57.   char* fileOut = argv[3];
  58.  
  59.   char* myset = " ";
  60.  
  61.   CRITICAL_SECTION * wcs;
  62.  
  63.   HANDLE semaforo;
  64.  
  65.   InitializeCriticalSection(&wcs);
  66.  
  67.   semaforo = CreateSemaphore(NULL, MAX_THREAD, MAX_THREAD, NULL);
  68.  
  69.   elabora(path, palabra, semaforo, myset, fileOut);
  70.  
  71.   CloseHandle(semaforo);
  72.  
  73.   DeleteCriticalSection(&wcs);
  74.  
  75.   return 0;
  76.  
  77. }
  78.  
  79. void lock(CRITICAL_SECTION * cs){
  80.  
  81. EnterCriticalSection(&cs);
  82.  
  83. }
  84.  
  85. void unlock(CRITICAL_SECTION * cs){
  86.  
  87. LeaveCriticalSection(&cs);
  88.  
  89. }
  90.  
  91. int elabora(char* path, char* palabra, HANDLE semaforo, char* myset, char* fileOut) {
  92.  
  93.    int i;
  94.  
  95. for(i=0; i < MAX_THREAD; i++ )
  96.  
  97. WaitForSingleObject(semaforo,INFINITE);
  98.  
  99. if(strlen(myset)==0)
  100.  
  101.        printf("La cadena a buscar no se encuentra en el directorio especificado \n");
  102.  
  103. else
  104.  
  105. produceFileOut(fileOut, myset);
  106.  
  107. return 0;
  108.  
  109. }
  110.  
  111. int busquedaPalabra(char* path, char* palabra, HANDLE sem, char* myset, CRITICAL_SECTION * wcs, HANDLE* semaforo) {
  112.  
  113.    HANDLE hthread;
  114.  
  115.    char *puntero;
  116.  
  117. char* dirname=getPath(path);
  118.  
  119. WIN32_FIND_DATA file1;
  120.  
  121. HANDLE fd=INVALID_HANDLE_VALUE ;
  122.  
  123.    strcat(dirname,"\\*");
  124.  
  125. fd=FindFirstFile(dirname,&file1);
  126.  
  127. if(fd==INVALID_HANDLE_VALUE )
  128.  
  129. return -1;
  130.  
  131. while(FindNextFile(fd,&file1)!=0) {
  132.  
  133. if((file1.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)!=0) {
  134.  
  135. if((strcmp(file1.cFileName,".")!=0) && (strcmp(file1.cFileName,"..")!=0)) {
  136.  
  137. char* subdir=dirname;
  138.  
  139.                size_t its=strlen(subdir);
  140.  
  141.                its--;
  142.  
  143.                puntero=(char *)malloc(its);
  144.  
  145.                strcpy(puntero, subdir);
  146.  
  147.                strcat(puntero, file1.cFileName);
  148.  
  149. busquedaPalabra(puntero,palabra,sem,myset,wcs,semaforo);
  150.  
  151.                free(puntero);
  152.  
  153. }
  154.  
  155. }
  156.  
  157. else {
  158.  
  159. char* nameF=dirname;
  160.  
  161.            size_t its=strlen(nameF);
  162.  
  163.            its--;
  164.  
  165.            puntero=(char*)malloc(its);
  166.  
  167.            strcpy(puntero, nameF);
  168.  
  169.            strcat(puntero, file1.cFileName);
  170.  
  171. WaitForSingleObject(semaforo,INFINITE);
  172.  
  173.            param.filein=puntero;
  174.  
  175.            param.palabra=palabra;
  176.  
  177.            param.myset=myset;
  178.  
  179.            param.wcs=wcs;
  180.  
  181.            param.semaforo=&semaforo;
  182.  
  183. hthread= (HANDLE)_beginthreadex(NULL,0,&myRun,(void *)(param),0,NULL );
  184.  
  185. CloseHandle(hthread);
  186.  
  187. }
  188.  
  189. }
  190.  
  191.    FindClose(fd);
  192.  
  193.    return 0;
  194.  
  195. }
  196.  
  197. void produceFileOut(char* fileOut, char* myset) {
  198.  
  199. FILE *fout;
  200.  
  201. fout = fopen (fileOut, "wt");
  202.  
  203. fwrite(myset, strlen(myset)+1, 1, fout);
  204.  
  205. fclose(fout);
  206.  
  207. }
  208.  
  209. char *getPath(const char* filename) {
  210.  
  211. DWORD   retval = 0;
  212.  
  213.    char   fullPath[BUFSIZE]=TEXT("");
  214.  
  215.    char valor;
  216.  
  217.    LPTSTR  lpszFilePart = NULL;
  218.  
  219. retval = GetFullPathName(filename, BUFSIZE, fullPath, &lpszFilePart);
  220.  
  221. valor= fullPath;
  222.  
  223. return valor;
  224.  
  225. }
  226.  
  227. unsigned int WINAPI myRun(LPVOID lpParam) {
  228.  
  229. Param *pa=lpParam;
  230.  
  231. char* pos;
  232.  
  233. char* s;
  234.  
  235. FILE *fin;
  236.  
  237.    char* ret;
  238.  
  239. fin = fopen(pa.filein(), "wt");
  240.  
  241. while(getline(fin,s)) {
  242.  
  243. pos= strchr(s, pa.palabra);
  244.  
  245. if (pos!=npos) {
  246.  
  247.            lock(*pa.wcs);
  248.  
  249.            ret=strcat(pa.myset, pa.filein);
  250.  
  251. break;
  252.  
  253. }
  254.  
  255. }
  256.  
  257.    unlock(*pa.wcs);
  258.  
  259. fclose(fin);
  260.  
  261. ReleaseSemaphore(*(pa.semaforo),1L,NULL);
  262.  
  263. return 0;
  264.  
  265. }


y como buenamente puedo lo paso a Ubuntu:

Código
  1. #include <stdio.h>
  2.  
  3. #include <string.h>
  4.  
  5. #include <stdlib.h>
  6. #include <assert.h>
  7. #include <pthread.h>
  8. #include <limits.h>
  9. #include <unistd.h>
  10. #include <semaphore.h>
  11. #include <sys/types.h>
  12. #include <errno.h>
  13. #include <sys/stat.h>
  14. #include <fcntl.h>
  15. #include <time.h>
  16. #include <dirent.h>
  17.  
  18. #define MAX_THREAD 1
  19.  
  20. #define BUFSIZE 4096
  21.  
  22. #define WIN32_LEAN_AND_MEAN
  23.  
  24. typedef struct {
  25.  
  26. char* filein;
  27.  
  28. char* palabra;
  29.  
  30.     pthread_mutex_t * wcs;
  31.  
  32. char* myset;
  33.  
  34. sem_t semaforo;
  35.  
  36. }param;
  37.  
  38. extern unsigned int WINAPI myRun(LPVOID lpParam);
  39.  
  40. void lock(pthread_mutex_t * cs);
  41.  
  42. void unlock(pthread_mutex_t * cs);
  43.  
  44. int elabora(char* path, char* palabra, sem_t semaforo, char* myset, char* fileOut);
  45.  
  46. int busquedaPalabra(char* path, char* palabra, sem_t sem, char* myset, pthread_mutex_t * wcs, sem_t semaforo);
  47.  
  48. void produceFileOut(char* fileOut, char* myset);
  49.  
  50. char *getPath(const char* filename);
  51.  
  52. int main (int argc, char* argv[]) {
  53.  
  54.   char* path = argv[1];
  55.  
  56.   char* palabra = argv[2];
  57.  
  58.   char* fileOut = argv[3];
  59.  
  60.   char* myset = " ";
  61.  
  62.   pthread_mutex_t * wcs;
  63.  
  64.   sem_t semaforo;
  65.  
  66.   pthread_mutex_init(&wcs);
  67.   sem_init(&semaforo, MAX_THREAD, NULL);
  68.  
  69.   elabora(path, palabra, semaforo, myset, fileOut);
  70.  
  71.   sem_post(&semaforo);
  72.  
  73.   pthread_mutex_destroy(&wcs);
  74.  
  75.   return 0;
  76.  
  77. }
  78.  
  79. void lock(pthread_mutex_t * cs){
  80.  
  81. pthread_mutex_lock(&cs);
  82.  
  83. }
  84.  
  85. void unlock(pthread_mutex_t * cs){
  86.  
  87. pthread_mutex_unlock(&cs);
  88.  
  89. }
  90.  
  91. int elabora(char* path, char* palabra, sem_t semaforo, char* myset, char* fileOut) {
  92.  
  93.    int i;
  94.  
  95. for(i=0; i < MAX_THREAD; i++ )
  96. wait(&semaforo);
  97.  
  98. if(strlen(myset)==0)
  99.  
  100.         printf("La cadena a buscar no se encuentra en el directorio especificado \n");
  101.  
  102. else
  103.  
  104. produceFileOut(fileOut, myset);
  105.  
  106. return 0;
  107.  
  108. }
  109.  
  110. int busquedaPalabra(char* path, char* palabra, HANDLE sem, char* myset, pthread_mutex_t * wcs, sem_t semaforo) {
  111.  
  112.    pthread_t hthread;
  113.  
  114.    char *puntero;
  115.  
  116.    char* dirname=getPath(path);
  117.    DIR file1;
  118.  
  119.    struct stat statbuf;
  120.    struct dirent *direntp;
  121.  
  122.    int fd=NULL;
  123.  
  124.    strcat(dirname,"\\*");
  125.  
  126.    fd=readdir(dirname,&file1);
  127.  
  128.    if(fd==NULL )
  129.  
  130. return -1;
  131.    direntp = readdir(file1);
  132.    stat(file1, &statbuf);
  133.  
  134.    while(readdir(fd,&file1)!=0) {
  135.  
  136. if(statbuf.st_mode & S_IFDIR) {
  137. if((direntp.d_name != 0) && (direntp.d_name != 0)) {
  138.  
  139. char* subdir=dirname;
  140.  
  141.                size_t its=strlen(subdir);
  142.  
  143.                its--;
  144.  
  145.                puntero=(char *)malloc(its);
  146.  
  147.                strcpy(puntero, subdir);
  148.  
  149.                strcat(puntero, file1.cFileName);
  150.  
  151. busquedaPalabra(puntero,palabra,sem,myset,wcs,semaforo);
  152.  
  153.                free(puntero);
  154.  
  155. }
  156. }
  157.  
  158. else {
  159.  
  160. char* nameF=dirname;
  161.  
  162.                size_t its=strlen(nameF);
  163.  
  164.            its--;
  165.  
  166.            puntero=(char*)malloc(its);
  167.  
  168.            strcpy(puntero, nameF);
  169.  
  170.            strcat(puntero, file1.cFileName);
  171.  
  172. wait(&semaforo);
  173.  
  174.                param.filein=puntero;
  175.  
  176.            param.palabra=palabra;
  177.  
  178.            param.myset=myset;
  179.  
  180.            param.wcs=wcs;
  181.  
  182.            param.semaforo=&semaforo;
  183. pthread_create((hthread, NULL, &myRun, (void *)(param)));
  184.  
  185. pthread_kill(hthread);
  186. }
  187.    }
  188.  
  189.    closedir(fd);
  190.  
  191.    return 0;
  192.  
  193. }
  194.  
  195. void produceFileOut(char* fileOut, char* myset) {
  196.  
  197. FILE *fout;
  198.  
  199. fout = fopen (fileOut, "wt");
  200.  
  201. fwrite(myset, strlen(myset)+1, 1, fout);
  202.  
  203. fclose(fout);
  204.  
  205. }
  206.  
  207. char *getPath(const char* filename) {
  208.    getcwd(filename,BUFSIZE);
  209.  
  210. }
  211.  
  212. unsigned int WINAPI myRun(LPVOID lpParam) {
  213.  
  214.    Param *pa=lpParam;
  215.  
  216.    char* pos;
  217.  
  218.    char* s;
  219.  
  220.    FILE *fin;
  221.  
  222.    char* ret;
  223.  
  224.    fin = fopen(pa.filein(), "wt");
  225.  
  226.    while(getline(fin,s)) {
  227.  
  228. pos= strchr(s, pa.palabra);
  229.  
  230. if (pos!=npos) {
  231.  
  232.            lock(*pa.wcs);
  233.  
  234.            ret=strcat(pa.myset, pa.filein);
  235.  
  236.          break;
  237.  
  238. }
  239.  
  240.    }
  241.  
  242.    unlock(*pa.wcs);
  243.  
  244.    fclose(fin);
  245.  
  246.    sem_destroy(*(pa.semaforo));
  247.  
  248.    return 0;
  249.  
  250. }
  251.  

El problema es que no se como sustituir la función WINAPI con alguna que funcione en ubuntu y tenga la misma funcionalidad, o adaptar el programa entero a ubuntu de la mejor manera posible.

Por cierto, el lenguaje de programación es C, no C++

Muchas gracias a todos.

Lh: Utiliza las etiquetas GeSHi para poner código.
24  Programación / Programación C/C++ / Re: Funciones end and erase en C? en: 5 Agosto 2010, 03:39 am
Gracias, creo que lo sabí resolver bien  ;-)
25  Programación / Programación C/C++ / Funciones end and erase en C? en: 1 Agosto 2010, 20:18 pm
Tengo el siguiente codigo en C++:

.
.
.
string subdir=dirname;
string::iterator its=subdir.end();
its--;
subdir.erase(its);
subdir+=file1.cFileName;
.
.
.

Y me gustaría transformarlo a código C, pero tengo problema con las funciones end y erase porque no existen en C y no sé cuales podrían ser sus equivalentes.

Muchas gracias
26  Programación / Programación C/C++ / Re: Programación en C bajo Windows y Linux en: 27 Julio 2010, 22:41 pm
GRACIAS
27  Programación / Programación C/C++ / Programación en C bajo Windows y Linux en: 27 Julio 2010, 19:45 pm
Necesito hacer unas prácticas de programación de sistemas en C bajo Windows y Linux, el problema es que busco en Google y todo lo que encuentro es en C++.

¿Conoceis algunos tutoriales en C y ejemplos que sea buenos?

Muchas gracias

28  Sistemas Operativos / Windows / Programación en C bajo windows en: 26 Julio 2010, 23:52 pm
Necesito hacer unas prácticas de programación de sistemas en C bajo Windows y Linux, el problema es que busco en Google y todo lo que encuentro es en C++.

¿Conoceis algunos tutoriales en C con ejemplos que sea buenos?

Muchas gracias
29  Seguridad Informática / Nivel Web / Re: Aplicar seguridad XSS en: 22 Julio 2010, 21:53 pm
Gracias a todos por responder.

Muchas gracias Erfiug porque funciona.

 ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)
30  Seguridad Informática / Nivel Web / Aplicar seguridad XSS en: 22 Julio 2010, 09:47 am
Hola,

Esta parte del código en java es vulnerable a XSS:

 <%String espe=es[1];%>
                    email antiguo: <input type="text" name="espeA" value=<%=espe%>><br>
                     <br>email nuevo: <input type="text" name="espe"><br>
                     <br><input type="submit" value="Modificar">
                <%}else{%>
                <input type="hidden" name="oculto" value="a">
                <%}%>
                <%if(request.getParameter("espe")!=null){
                String especialidad=request.getParameter("espe");
                int cod=Integer.parseInt(request.getParameter("oculto"));

He estado buscando cómo resolverlo por este foro, y he visto que podía añadir es script http://www.json.org/json2.jsp para resolverlo, pero no lo se hacer.
O añadir htaccess, pero tampoco lo se.

Por otro sitio he visto que se podía resolver con JSTL, y tambien con la librería ESAPI, pero con JSTL no me funciona y con ESAPI no tengo ni idea.

Total que despues de documentarme un monton estoy super perdida.

Me gustaría que me ayudaran a resolverlo, aunque sea de la manera más sencilla, porque soy principiante
Páginas: 1 2 [3]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines