Board.KolibriOS.org

Official KolibriOS board
It is currently Thu Nov 14, 2019 7:37 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 1119 posts ]  Go to page Previous 156 57 58 59 6075 Next
Author Message
PostPosted: Tue Oct 08, 2013 4:56 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1151
Кроме как при помощи ф70.5 можно проверить существование файла? А то не хочется как то, выделять память под всю структуру.

_________________
я лишь учусь


Top
   
PostPosted: Tue Oct 08, 2013 5:13 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
punk_joker wrote:
Кроме как при помощи ф70.5 можно проверить существование файла? А то не хочется как то, выделять память под всю структуру.

Если включить воображение:
Spoiler: Show
ф.70.1
* +12 = +0xC: dword: сколько байт читать, 1 байт.
З.Ы. Только для файлов, не для директорий.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Tue Oct 08, 2013 6:49 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1151
Mario_r4 wrote:
ф.70.1
* +12 = +0xC: dword: сколько байт читать, 1 байт.
З.Ы. Только для файлов, не для директорий.

Дело в том, что мне необходимы вариант как для файлов, так и для папок.

_________________
я лишь учусь


Top
   
PostPosted: Tue Oct 08, 2013 6:53 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Mario_r4 wrote:
Если включить воображение:
Это суровый метод апостола Фомы.

punk_joker wrote:
А то не хочется как то, выделять память под всю структуру
Структура маленькая, выделяй место в стеке и не мучайся ненужными сомнениями.


Top
   
PostPosted: Tue Oct 08, 2013 7:14 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Mario_r4 wrote:
ф.70.1
* +12 = +0xC: dword: сколько байт читать, 1 байт.
З.Ы. Только для файлов, не для директорий.
Для файлов ф.70.0 же.

punk_joker wrote:
не хочется как то, выделять память под всю структуру.
Тебе жалко 40 байт?
В зависимости от задачи можно использовать всегда один и тот же буфер, не выделяя каждый раз новый. Но в этом случае в многопоточном приложении нужно следить, чтобы с этим буфером не пытались работать одновременно несколько потоков — использовать средства синхронизации.

punk_joker wrote:
мне необходимы вариант как для файлов, так и для папок.
Поэтому ф70.5.


Top
   
PostPosted: Wed Oct 09, 2013 12:36 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5064
Было в одном из файлов SHELL, поиск первого вхождения символа
Code:
char* strchr(const char* string, int c)
{
   while (*string)
   {
      if (*string==c)
         return (char*)string;
      string++;
   }   
   return (char*)0;
}

Мне понадобилась похожая функция, только поиск не первого, а последнего вхождения символа. Набыдлогодил по быстрому, основываясь на предыдущем примере:
Code:
char* strrchr(const char* string, int c)
{
   int last_found;
   while (*string)
   {
      if (*string==c)
      {
         last_found = string;
      }
      string++;
   }   
   return (char*)last_found;
}

Рабатает, но выдаёт ворнинги:
Code:
system/string.c: In function 'strrchr':
system/string.c:133:15: warning: assignment makes integer from pointer without a
 cast [enabled by default]
    last_found = string;

Почему и как исправить?

_________________
Через тернии к звездам


Top
   
PostPosted: Wed Oct 09, 2013 12:52 am 
Offline

Joined: Tue Oct 05, 2010 6:05 pm
Posts: 216
вероятно надо:
char* last_found;
...
last_found = (char*)string;
...
return last_found;


Top
   
PostPosted: Wed Oct 09, 2013 7:44 am 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
0CodErr wrote:
Для файлов ф.70.0 же.

Черт побери! А ты прав! :)
Вот что бывает, когда пытаешься и на работе работать и тут подрабатывать.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Wed Oct 09, 2013 7:46 am 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Serge wrote:
Это суровый метод апостола Фомы.

Ну, мы тут все в чем то монахи, блин. В то время как космические корабли бороздят просторы больших театров...

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Wed Oct 09, 2013 12:33 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5064
lev wrote:
вероятно надо:
char* last_found;
...
last_found = (char*)string;
...
return last_found;

char* - это указатель? В С-- указатель я использую dword, возможно это и неправильно.
(char*) - что значит эта конструкция?
return last_found; - почему в конче просто last_found?

_________________
Через тернии к звездам


Top
   
PostPosted: Wed Oct 09, 2013 1:38 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
(char*) var = преобразовать var к (char *), т.е. к указателю на char.


Top
   
PostPosted: Wed Oct 09, 2013 2:06 pm 
Offline

Joined: Thu Feb 19, 2009 12:57 pm
Posts: 68
Если объявить last_found как char *, то преобразование типов не нужно будет.
Т.е.

char* last_found;
...
last_found = string;
...
return last_found;


Top
   
PostPosted: Thu Oct 10, 2013 9:57 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5064
Insolor wrote:
Если объявить last_found как char *, то преобразование типов не нужно будет.
Т.е.

char* last_found;
...
last_found = string;
...
return last_found;
Оказывается нужно, т.к. const char* и char*

_________________
Через тернии к звездам


Top
   
PostPosted: Thu Oct 10, 2013 11:34 am 
Offline

Joined: Thu Feb 19, 2009 12:57 pm
Posts: 68
Leency wrote:
Insolor wrote:
Если объявить last_found как char *, то преобразование типов не нужно будет.
Т.е.

char* last_found;
...
last_found = string;
...
return last_found;
Оказывается нужно, т.к. const char* и char*

Ок, только не "т.к. const char* и char*" (это ни о чем мне не говорит), а "warning: assignment discards qualifiers from pointer target type". Так что да, приведение все-таки нужно.


Top
   
PostPosted: Thu Oct 10, 2013 3:49 pm 
Offline
User avatar

Joined: Sat Oct 05, 2013 9:32 pm
Posts: 386
Указатели на указатели - многочисленное перенаправление

Такой вопрос. У меня, к примеру, в переменной var лежит число 5. Я сделал указатель на var, _var, а потом указатель на _var, __var. Как мне быстро узнать значение var, используя __var? Приходится использовать такой код:
Code:
mov   eax, [__var]
dpd    [eax]


А хотелось бы что нибудь вроде
Code:
dpd    [ [_var] ]


Для чего мне это нужно? Для куч.
Code:
    use32
    org     0x0

;---------------------------------------------------------------------

    db       'MENUET01'
    dd       0x01, __START, __END, 0x1000, 0x1000, 0x0, 0x0

;---------------------------------------------------------------------

    include 'macros.inc'
    include 'debug.inc'

;=====================================================================
__START:
;=====================================================================

init_heap:
    mcall   68, 11
    cmp     eax, 0
    je       exit

    mov     ecx, 4
    add     ecx, 4
    add     ecx, 1024
    mcall   68,  12

    mov     [buff.x], eax
    add     eax, 4
    mov     [buff.y], eax

;---------------------------------------------------------------------

main:
    mov     eax, [buff.x]
    mov     [eax], 10
    add     eax, 4
    mov     [eax], 20

;   ...     ...

;---------------------------------------------------------------------

exit:
    mcall   68, 13, [buff]
    mcall   -1

;---------------------------------------------------------------------

buff:
.x  rd      0
.y  rd      0

;=====================================================================
__END:
;=====================================================================


Есть ли способ?


Last edited by e-andrew on Thu Oct 10, 2013 4:31 pm, edited 1 time in total.

Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 1119 posts ]  Go to page Previous 156 57 58 59 6075 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited