Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - bertamax

#21
#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
#23
Hola,

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

#include <stdio.h>

#include <string.h>

#include <windows.h>

#include <process.h>

#include <direct.h>

#include <stdlib.h>

#include <ctype.h>

#include <conio.h>

#define MAX_THREAD 1

#define BUFSIZE 4096

#define WIN32_LEAN_AND_MEAN

typedef struct {

char* filein;

char* palabra;

   CRITICAL_SECTION * wcs;

char* myset;

HANDLE* semaforo;

}param;

extern unsigned int WINAPI myRun(LPVOID lpParam);

void lock(CRITICAL_SECTION * cs);

void unlock(CRITICAL_SECTION * cs);

int elabora(char* path, char* palabra, HANDLE semaforo, char* myset, char* fileOut);

int busquedaPalabra(char* path, char* palabra, HANDLE sem, char* myset, CRITICAL_SECTION * wcs, HANDLE* 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 = " ";

  CRITICAL_SECTION * wcs;

  HANDLE semaforo;

  InitializeCriticalSection(&wcs);

  semaforo = CreateSemaphore(NULL, MAX_THREAD, MAX_THREAD, NULL);

  elabora(path, palabra, semaforo, myset, fileOut);

  CloseHandle(semaforo);

  DeleteCriticalSection(&wcs);

  return 0;

}

void lock(CRITICAL_SECTION * cs){

EnterCriticalSection(&cs);

}

void unlock(CRITICAL_SECTION * cs){

LeaveCriticalSection(&cs);

}

int elabora(char* path, char* palabra, HANDLE semaforo, char* myset, char* fileOut) {

   int i;

for(i=0; i < MAX_THREAD; i++ )

WaitForSingleObject(semaforo,INFINITE);

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, HANDLE sem, char* myset, CRITICAL_SECTION * wcs, HANDLE* semaforo) {

   HANDLE hthread;

   char *puntero;

char* dirname=getPath(path);

WIN32_FIND_DATA file1;

HANDLE fd=INVALID_HANDLE_VALUE ;

   strcat(dirname,"\\*");

fd=FindFirstFile(dirname,&file1);

if(fd==INVALID_HANDLE_VALUE )

return -1;

while(FindNextFile(fd,&file1)!=0) {

if((file1.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)!=0) {

if((strcmp(file1.cFileName,".")!=0) && (strcmp(file1.cFileName,"..")!=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);

WaitForSingleObject(semaforo,INFINITE);

           param.filein=puntero;

           param.palabra=palabra;

           param.myset=myset;

           param.wcs=wcs;

           param.semaforo=&semaforo;

hthread= (HANDLE)_beginthreadex(NULL,0,&myRun,(void *)(param),0,NULL );

CloseHandle(hthread);

}

}

   FindClose(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) {

DWORD   retval = 0;

   char   fullPath[BUFSIZE]=TEXT("");

   char valor;

   LPTSTR  lpszFilePart = NULL;

retval = GetFullPathName(filename, BUFSIZE, fullPath, &lpszFilePart);

valor= fullPath;

return valor;

}

unsigned int WINAPI myRun(LPVOID lpParam) {

Param *pa=lpParam;

char* pos;

char* s;

FILE *fin;

   char* ret;

fin = fopen(pa.filein(), "wt");

while(getline(fin,s)) {

pos= strchr(s, pa.palabra);

if (pos!=npos) {

           lock(*pa.wcs);

           ret=strcat(pa.myset, pa.filein);

break;

}

}

   unlock(*pa.wcs);

fclose(fin);

ReleaseSemaphore(*(pa.semaforo),1L,NULL);

return 0;

}



y como buenamente puedo lo paso a Ubuntu:

#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

#define WIN32_LEAN_AND_MEAN

typedef struct {

char* filein;

char* palabra;

    pthread_mutex_t * wcs;

char* myset;

sem_t semaforo;

}param;

extern unsigned int WINAPI myRun(LPVOID lpParam);

void lock(pthread_mutex_t * cs);

void unlock(pthread_mutex_t * cs);

int elabora(char* path, char* palabra, 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);
  sem_init(&semaforo, MAX_THREAD, NULL);

  elabora(path, palabra, 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(char* path, char* palabra, 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, HANDLE 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,"\\*");

   fd=readdir(dirname,&file1);

   if(fd==NULL )

return -1;
   direntp = readdir(file1);
   stat(file1, &statbuf);

   while(readdir(fd,&file1)!=0) {

if(statbuf.st_mode & S_IFDIR) {
if((direntp.d_name != 0) && (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, (void *)(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);

}

unsigned int WINAPI myRun(LPVOID lpParam) {

   Param *pa=lpParam;

   char* pos;

   char* s;

   FILE *fin;

   char* ret;

   fin = fopen(pa.filein(), "wt");

   while(getline(fin,s)) {

pos= strchr(s, pa.palabra);

if (pos!=npos) {

           lock(*pa.wcs);

           ret=strcat(pa.myset, pa.filein);

         break;

}

   }

   unlock(*pa.wcs);

   fclose(fin);

   sem_destroy(*(pa.semaforo));

   return 0;

}


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
Gracias, creo que lo sabí resolver bien  ;-)
#25
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
#27
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
Windows / Programación en C bajo windows
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
Nivel Web / Re: Aplicar seguridad XSS
22 Julio 2010, 21:53 PM
Gracias a todos por responder.

Muchas gracias Erfiug porque funciona.

;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)
#30
Nivel Web / Aplicar seguridad XSS
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