• Sábado 9 de Noviembre de 2024, 03:45

Autor Tema:  Cabeceras de un programa en C  (Leído 1836 veces)

bertamax

  • Nuevo Miembro
  • *
  • Mensajes: 22
    • Ver Perfil
Cabeceras de un programa en C
« en: Martes 17 de Noviembre de 2009, 02:47 »
0
¿Por qué mi programa en C no me reconoce las caberas tchar.h windows.h process.h iostream string fstream set y direct.h?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Cabeceras de un programa en C
« Respuesta #1 en: Martes 17 de Noviembre de 2009, 09:15 »
0
¿Que compilador estas usando? iostream string fstream set son parte de C++ (tchar.h puede que tambien lo sea), process.h, direct.h y windows.h no son standard, dependeran del S.O. y el entorno que uses.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

bertamax

  • Nuevo Miembro
  • *
  • Mensajes: 22
    • Ver Perfil
Re: Cabeceras de un programa en C
« Respuesta #2 en: Martes 17 de Noviembre de 2009, 12:33 »
0
Pues uso compilo en línea de comandos con gcc en un entorno Ubuntu, muchas gracias

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Cabeceras de un programa en C
« Respuesta #3 en: Martes 17 de Noviembre de 2009, 13:08 »
0
Para las cabeceras de C++ necesitas g++ y no gcc. Mejor pega el codigo ... pero si estas incluyendo windows.h en Linux seguro que no funcionara jamas.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

bertamax

  • Nuevo Miembro
  • *
  • Mensajes: 22
    • Ver Perfil
Re: Cabeceras de un programa en C
« Respuesta #4 en: Martes 17 de Noviembre de 2009, 17:45 »
0
Este es mi código:

#pragma once
#define WIN32_LEAN_AND_MEAN
#include <stdio.h>
#include <tchar.h>
#include <process.h>
#include <string.h>
#include <direct.h>
#include <stdlib.h>
#define MAX_THREAD 19
#define BUFSIZE 4096
using namespace std;

typedef struct Param {
   string filein;
   string parola;
   set<string>* myset;
   CRITICAL_SECTION* wcs;
   HANDLE* semaforo;
}

unsigned int WINAPI myRun(LPVOID lpParam) {
   Param *pa=reinterpret_cast<Param*>(lpParam);
   size_t pos;
   string s;
   ifstream fin;
   fin.open(pa.filein.c_str());
   pair<set<string>::iterator,bool> ret;
   while(getline(fin,s)) {
      pos=s.find(pa.parola);
      if (pos!=string::npos) {
         try {
            EnterCriticalSection(*pa.wcs);
            ret=pa.myset->insert(pa.filein);
         } catch(Exception e) {
            ReleaseSemaphore(*(pa.semaforo),1L,NULL);
         }
         break;
      }
   }
   fin.close();
   ReleaseSemaphore(*(pa.semaforo),1L,NULL);
   delete pa;
   return 0;
}
int ricercaParola(string path, string parola) {
   string dirname=getPath(path.c_str());
   WIN32_FIND_DATA file1;
   HANDLE fd=INVALID_HANDLE_VALUE;
   dirname+="\*";
   fd=FindFirstFile(dirname.c_str(),&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)) {
            string subdir=dirname;
            string::iterator its=subdir.end();
            its--;
            subdir.erase(its);
            subdir+=file1.cFileName;
            ricercaParola(subdir,parola);
         }
      }
      else {
         string nameF=dirname;
         string::iterator its=nameF.end();
         its--;
         nameF.erase(its);
         nameF+=file1.cFileName;
         WaitForSingleObject(semaforo,INFINITE);
         pa.filein=nameF;
         pa.parola=parola;
         HANDLE hthread= (HANDLE)_beginthreadex(NULL,0,&myRun,reinterpret_cast<void*>(parameter),0,NULL);
         CloseHandle(hthread);
      }
   }
   FindClose(fd);
   return 0;
}
void produceFileOut() {
   ofstream fout;
   fout.open(fileOut);
   set<string>::iterator it=myset->begin();
   for(;it!=myset->end();it++) {
      fout<<(*it).c_str()<<endl;
   }
   fout.close();
}
string getPath(const char* filename) {
   DWORD retval = 0;
   char fullPath[BUFSIZE]=TEXT("");
   LPTSTR lpszFilePart = NULL;
   retval = GetFullPathName(filename,BUFSIZE,fullPath,&lpszFilePart);
   string value=reinterpret_cast<const char*>(fullPath);
   return value;
}
int main(int argc, char* argv[]) {
   string path;
   string parola;
   char* fileOut;
   set<string>* myset;
   Win32Critical_Section* wcs;
   HANDLE semaforo;
   if(argc != 4) {
      printf("nUsage: %s nome,directory,stringa da ricercare,fileoutn",argv[0]);
      return (-1);
   }
   path=reinterpret_cast<const char*>(argv[1]);
   parola=reinterpret_cast<const char*>(argv[2]);
   fileOut=argv[3];
   myset=new set<string>();
   wcs=new Win32Critical_Section();
   pa.semaforo=CreateSemaphore(NULL, MAX_THREAD, MAX_THREAD, NULL);
   if(ricercaParola(path,parola)<0) {
      printf("npath errato o directory non presente nel path specificato n");
      return -1;
   }
   for(int i=0; i < MAX_THREAD; i++ )
      WaitForSingleObject(semaforo,INFINITE);
   if(myset->size()==0)
      cout<<"la stringa richiesta non è presente nella directory specificata"<<endl;
   else
      produceFileOut();
   return 0;
}

Es de un código que me pasaron en C++ sobre Linux, que yo lo estoy adaptando a C, por eso me hago un poco de lío con las cabeceras.

Muchas gracias. Saludos.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Cabeceras de un programa en C
« Respuesta #5 en: Martes 17 de Noviembre de 2009, 18:57 »
0
Si, es C++ pero es para Windows.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.