wopen i linux?

Här diskuteras programmering och utveckling
steqve
Inlägg: 155
Blev medlem: 06 feb 2007, 20:23

wopen i linux?

Inlägg av steqve »

i windows finns funktionen wopen som tar emot wide-char sträng som filnamn. Vad heter motsvarigheten i linux?
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

SV: wopen i linux?

Inlägg av Lars »

Motsvarigheten heter fopen(), oavsett teckenkodning.
steqve
Inlägg: 155
Blev medlem: 06 feb 2007, 20:23

SV: wopen i linux?

Inlägg av steqve »

fopen använder ju FILE objektet, och jag vill nyttja open som returnerar integer.
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

SV: wopen i linux?

Inlägg av Lars »

Ja, men använd open() då ;) Den är också oberoende av teckenkodning.
steqve
Inlägg: 155
Blev medlem: 06 feb 2007, 20:23

SV: wopen i linux?

Inlägg av steqve »

hm..om jag inte missminner mig så deklareras open enligt open( const char *, int )

jag behöver open( const wchar_t*, int), i windows heter den wopen och jag har iskallt räknat med att en dylik funktion skulle finnas i gcc.

Jag har alltså en wide-sträng som skall ned i funktionen. Därav problemet :(
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

SV: wopen i linux?

Inlägg av Lars »

Hm, jag började läsa på lite om problemet och insåg att det kanske inte är så lätt som jag först trodde. Men första argumentet till open() skickas i alla fall direkt till filsystemet, det sker ingen omvandling av teckenkodningen där. Så du kan skicka t.ex. en UTF-8-sträng till open() på ett system som använder latin-1, men filnamnet kommer ju att se konstigt ut.

Förmodligen använder man wcsnrtombs() för att konvertera till rätt teckenkodning, men jag ska erkänna att jag har väldigt lite erfarenhet av sådana här nymodigheter.
Användarvisningsbild
gasol
Inlägg: 405
Blev medlem: 27 jul 2007, 14:57
Kontakt:

SV: wopen i linux?

Inlägg av gasol »

Intresant problem.

Jag hade inga problem med att konvertera en wchar_t sträng till en char sträng och sedan öppna filer med den. Sedan om filen är laddad med wchar_t data så spelar det ingen roll eftersom du inte ville använda strömmar så läser du ju på byte basis och det ska inte vara några problem så. Det _går_ att sätta strömmar som wchar_t orienterade.


Här är ett program som skriver ut sin egen kod, när sökvägen är sparade som en wchar_t sträng.

Kod: Markera allt

#include <wchar.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>


int wopen(const wchar_t *path, int flags);


int main(int argc, char **argv) {
   int fd;
   wchar_t *path = L"wopen.c";
   char buff[1024];

   memset(buff, 0, 1024);

   fd = wopen(path, O_RDONLY);

   read(fd, &buff, 1024);

   printf("%s\n",buff);

   close(fd);

   
   return 1;

}


int wopen(const wchar_t *path, int flags) {
#define MAX_LEN 256 
   char buff[MAX_LEN];

   /* hoppas att  wcsrtombs sätter errno... */
   if(wcsrtombs(buff, &path, 256, NULL) > 0)
      return open(buff, flags);
   else
      return -1;
#undef MAX_LEN
}
http://www.opengroup.org/onlinepubs/007 ... har.h.html innehåller mycket info om wchar funktionerna för posix system.
The Black Mountain Scorpion Hoedown Bluegrass Experience Gang
From Left to Right: Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle.
Skriv svar

Återgå till "Programmering och webbdesign"