LINUX.ORG.RU

Сообщения JekLove

 

Можно ли узнать handle библиотеки, загруженной dlopen(), внутри самой этой библиотеки?

Можно ли это сделать во время загрузки библиотеки, т.е. в функции dlopen()?

JekLove ()

Подскажите насчет сигналов, кто знает...

У меня такая задача: есть тред (pthread), который должен ожидать чего-то в функции select. Родительский тред ждет в это время некоего семафора. Когда семафор сигналит, он должнен убить дочерний тред, ожидающий в select. Я так понимаю, нужно послать ему сигнал. Вопрос: как это красиво сделать, какой сигнал посылать? Обязательно ли пользоваться функцией pselect, или можно обойтись и select? Если можно, кто-нибудь, набросайте общую схемку. Буду очень признателен.

JekLove ()

помогите с select/pipe, плииииз...

Вот такая прога не работает.
Здесь оба потока создаются нормально, один начинает писать в свой файл, сообщая каждую секунду write OK. Однако второй поток вообще ничего не сообщает, вызов select подвисает. Подскажите, плиз, в чем тут дело.

int mypipe[2];

void * start1(void*p)
{
  int i;
  char buf[1];
  int err;
  for(i=0;i<10;++i) {
    sleep(1);
    buf[0] = (char)i;
    if(write(mypipe[1], buf, 1) < 0) {
      perror("thread1: write error:");
      break;
    }    
  }
  return NULL;
}

void * start2(void*p)
{
  int i;
  int err;
  char buf[1];
  fd_set s;
  for(i = 0; i < 15; ++i) {
    FD_ZERO(&s);
    FD_SET(mypipe[0], &s);
    if((err=select(1, &s, NULL, NULL, NULL)) < 0) {
      perror("thread2: file descriptors select error:");
      break;
    }
    else if(err == 0)
      printf("select timeout\n");
    if(read(mypipe[0], buf, 1) < 0) {
      perror("thread2: read error:");
      break;
    }    
    else
      printf("data received: %d\n", buf[0]);
  }    
  return NULL;
}

int main()
{
  pthread_t th1, th2;
  int err;
  
  if((err = pipe(mypipe)) != 0) {
    perror("error creating pipe: ");
    return 1;
  }
  
  pthread_create(&th2, NULL, start2, NULL);
  pthread_create(&th1, NULL, start1, NULL);
  return 0;
}
JekLove ()

помогите с select/pipe, плииииз...

Вот такая прога не работает. Здесь оба потока создаются нормально, один начинает писать в свой файл, сообщая каждую секунду write OK. Однако второй поток вообще ничего не сообщает, вызов select подвисает. Подскажите, плиз, в чем тут дело.

int mypipe[2];

void * start1(void*p) { int i; char buf[1]; int err; for(i=0;i<10;++i) { sleep(1); buf[0] = (char)i; if(write(mypipe[1], buf, 1) < 0) { perror("thread1: write error:"); break; } } return NULL; }

void * start2(void*p) { int i; int err; char buf[1]; fd_set s; for(i = 0; i < 15; ++i) { FD_ZERO(&s); FD_SET(mypipe[0], &s); if((err=select(1, &s, NULL, NULL, NULL)) < 0) { perror("thread2: file descriptors select error:"); break; } else if(err == 0) printf("select timeout\n"); if(read(mypipe[0], buf, 1) < 0) { perror("thread2: read error:"); break; } else printf("data received: %d\n", buf[0]); } return NULL; }

int main() { pthread_t th1, th2; int err; if((err = pipe(mypipe)) != 0) { perror("error creating pipe: "); return 1; } pthread_create(&th2, NULL, start2, NULL); pthread_create(&th1, NULL, start1, NULL); return 0; }

JekLove ()

pthreads: ожидание нескольких семафоров

В винде есть функа WaitForMultipleObjects, принимает массив объектов и ждет одного из них или всех сразу. Есть ли в линуксе что-нибудь подобное? Или, может быть, кто-то занимался такими вещами? Прошу сильно не бить, если я что-то не то говорю, - я искал в доках, но что-то ничего не нашел. А занимаюсь тредами совсем недавно. Заранее всем большое спасибо.

JekLove ()

Насколько корректно использовать символ «тильда» в именах файлов?

Ведь этот символ используется в качестве имени домашней директории...

JekLove ()

Как бы добавить директорию в путь для поиска shared-библиотек?

Что-то у меня не получается. Я так понимаю, список директорий прописывается в /etc/ld.so.conf, а как мне сделать, чтобы ld находил мои *.so в моих же каталогах? Причем, конечно, для не-рута.

JekLove ()

Using ld

Братцы, что-то у меня не работает :(
Я делаю так:
ld -o myprog $(MY_OBJ) $(MY_STATIC_LIB) -lm
И используется динамическая libc.so.6.
Никаких ерроров/ворнингов не дается, но при запуске myprog получаю следующее:

bash: ./myprog: /usr/lib/libc.so.1: bad ELF interpreter: No such file or directory

Что это означает? И как мне сделать, чтобы все работало? Подскажите, плз, кто знает.

JekLove ()

Как узнать родную директорию запущенной программы?

На С. Т.е. если, например, екзешник проги находится в директории, входящей в PATH, а запускаю я ее из другого места. Как узнать точное имя родной директории, где лежит екзешник?

JekLove ()

Переносимость, Inline-функция fstat

Народ, есть проблема: нужно из программы не на языке С позвать функцию fstat. Объявляем соответствующий дефинишн... Но проблема в том, что функция fstat объявлена в stat.h как inline и, собственно, в libc.so ее просто-напросто нет. Спрашивается: как организовать это дело, чтобы моя программа была POSIX-переносимой? Может быть, есть какой-то аналог fstat? Нехорошая проблема, но если вдруг кто может подсказать что-нибудь хорошее, буду очень признателен.

JekLove ()

Кто общался с функциями семейства spawn*()?

Проблема у меня следующая. Есть старый код, который зовет функцию spawnv(). Эта функция не-POSIX, тем более что у меня в системе вообще нет этих функций spawn*(), а есть только posix_spawn().

Я понимаю, что spawnv при своем вызове зовет spawn. А spawn берет
в качестве параметра структуры, описывающие поведение дочернего процесса.
У spawnv таких аргументов нет. Спрашивается, какие аргументы по умолчанию
передаются spawn, когда я вызываю spawnv? Я искал-искал в доках,
но ничего по этому поводу не нашел.

Помогите мне, если кто-то сталкивался с такими проблемами.
Огромное thanx ответившему.




JekLove ()

Вопрос по POSIX C стандарту.

Где бы мне взять список стандартных POSIX С функций? Т.е. мне нужно знать, какие функции (из библиотеки С, скажем так) отвечают стандрарту POSIX.

Вот malloc() - POSIX-функция? В man malloc написано что ANSI. ANSI включает в себя POSIX? Ну а если нет, то какую функцию нужно использовать, чтобы программа соответствовала POSIX-стандарту?

Поделитесь соображениями, пожалуйста.
Заранее благодарен.

JekLove ()

Братцы, спасите! Скажите мне, где находится дефинишн структуры DIR? (она же __dirstream)

Что-то у меня ум за разум заходит... Переработал, может быть? :-/ Но НИГДЕ нет в заголовках нет этого __dirstream, а компиляется с этим символом все замечательно. У меня red hat.

JekLove ()

Как сделать так, чтобы стандартный вывод осуществлялся одновременно и на консоль и в файл?

Причем синхронно, т.е. cmd > log; cat log не подойдет, мне нужно сразу видеть сообщения. Кто знает, помогите, пожалуйста.

JekLove ()

Вопрос про NASM

 Странная вещь: есть у меня примерно такой исходник:

        section .text
        align 16
        ...
        mov [eax+0x20], es

        или так:

        mov word [eax+0x20], es
        mov [eax+0x20], word es
        mov word [eax+0x20], word es

Что неясно: во всех случаях NASM генерит код инструкции movl.
Как я узнаю? Объектник, полученный насмом, передаю objdump,
потом смотрю листинг, и там вместо movw стоит movl.
Причем as-овский сорец компиляется правильно:

        .text
        .align 16
        movw %es, 0x20(%eax)
 
т.е. листинг, полученный objdump и оригинальный сорец 
совпадают.

В чем может быть дело? Версия НАСМа у меня 0.98.34.
Может быть, так сделать нельзя, и тогда нужно просто
вставить в сорец коды нужной команды? Подскажите, если
кто знает, как это сделать.

Всем ответившим большое спасибо.



JekLove ()

Срочно! Как из объектника .o получить асмовый (.s) листинг?

Огромное спасибо спасителю.

JekLove ()

Братцы, выручайте! find & grep

Нужно перебрать все файлы в текущей директории и для каждого из них посмотреть, является ли он скриптом /bin/sh. Для таких файлов надобно установить атрибут chmod +x. И нужно это сделать одной командой... И использовать только find, grep, ну head, cat... без perl/awk & other. У меня не получается :((( Помогите, плииииз...

JekLove ()

Вопрос про tar, опция --files-from=-

Почему, когда я создаю тар-архив таким образом:

find . | tar --create --files-from=- --file=./../my_arch.tar

то каждый файл и директория присутствует в этом архве в трех экземплярах и сам архив получается соответственно в три раза больше по объему, чем сумма исходных файлов?

JekLove ()

Как получить список файлов, НЕ соответвующих шаблону?

Например, список всех файлов (из текущей директории и всех поддиректорий), имя которых - не "*.txt"

Подскажите, плз.

JekLove ()

Shell: проверка кода возврата приложения

Братцы, только не бейте :) Ну никак не могу это сделать: нужно в скрипте запускать компилятор несколько раз, и смотреть его код возврата. Что-то у меня не выходить :(

Вот так я делал: 

r=`java MyClass.java`
if [ $r -ne 0 ]; then
echo "Bad luck"
fi

И не работает :(
А как надо? 
Заранее спасибо всем откликнувшимся :)
JekLove ()

RSS подписка на новые темы