LINUX.ORG.RU

Сообщения murla

 

как правильно определять IP

Добрый день.

У меня интернет, к которому есть два сетевых интерфейса, eth0 - для локальной сети, и ppp0 (подключение через VPN по протоколу PPTP) - для удаленной. Если я захожу на локальные сервера, то who на них показывает мой IP в eth0, если на удаленные - то IP, который мне назначился в интерфейсе ppp0.

Вопросов два:

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

2) Мне нужно в С-приложении получить свой локальный IP, а он в этих двух случаях должен выставляться по-разному. Как мне это сделать - чтоб IP выставлялся правильно независимо от того, захожу я на машины локальной сети или удаленной?

Большое спасибо!

murla
()

не грузится ядро 2.6.11 + Xen 2.0.6

Добрый день.
Сабж. Говорит следующее при загрузке:

/bin/cat /sys/block/sda/dev: No such file or directory

Возможно, нет какого-то модуля. Винчестер у меня SATA.

Вот содержимое GRUB'ского menu.lst:

title       Xen 2.0.6 / XenLinux 2.6.11.9
root        (hd0,5)
kernel      /boot/xen.gz dom0_mem=65536
module      /boot/xen-linux-2.6.11.9 root=/dev/sda6 ro console=tty0
module      /boot/initrd.img-2.6.11.9
boot

title        Debian GNU/Linux, kernel 2.6.14
root         (hd0,5)
kernel       /boot/vmlinuz-2.6.14 root=/dev/sda6 ro
initrd       /boot/initrd.img-2.6.14
savedefault
boot

Ядро 2.6.14 собранное под х86, грузится без проблем.

За любую помощь большое спасибо!
murla
()

проблема с UDP Socket

Привет!

Отправляю UDP дейтаграмму с порта 5060 и читаю ответ с помощью
recvfrom. Для приема ответа создается отдельный сокет, которому
говорится

  Setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, ...);

чтобы не было ошибки "socket already in use". tcpdump показывает, что
приходит ответ на порт 5060, sip port (elzhov_local - моя машина):

  14:32:45.312129 IP c-24-218-216-50.domain.com.sip > elzhov_local.sip: SIP, length: 461

Тем не менее вызов recvfrom

    n = recvfrom( sock_fd, buf, 2, //buf_len,
                  0,
                  (struct sockaddr *)&src_sockaddr,
                  (socklen_t *)&src_sockaddr_len) );

НЕ возвращается. Далее, запускаю на локальной машине простой клиент,
который шлет что-то прямо на порт 5060 - и recvfrom сразу читает это и
возвращает 2.

В чем тут может быть дело? Большое спасибо!
murla
()

Как получить свой IP адрес?

Добрый день. Имею локальный IP "192.168.1.5", хочу его получить.
Пишу следующий код:

#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <pthread.h>
#include <unistd.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <fcntl.h>


int main(int argc, char **argv)
{
    int sd;
    struct sockaddr_in server;
    struct hostent *hp;
    char hostname[256];
    char hostip[16];

    sd = socket(AF_INET,SOCK_DGRAM,0);

    server.sin_family = AF_INET;

    gethostname(hostname, sizeof(hostname));

    hp = gethostbyname("elzhov");
    bcopy(hp->h_addr_list[0], &(server.sin_addr.s_addr), hp->h_length);
    inet_ntop(AF_INET, &server, hostip, sizeof(hostip));

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

    return 0;
}

Выдает "2.0.0.0". Если задаю имя не своего компьютера, а, например, www.msu.ru
- получаю то же самое. Если задаю имя, которое не резолвится - падает с
SegFault.

Как мне получить на вывод "192.168.1.5"?
Спасибо!
murla
()

ядро 2.6.14 - никак не поставить :(

Ставлю из коробки 2.6.8 - не грузится, говорит

  mount point dev doesn't exist

и

  cannot open file dev/console.

Собрал deb-пакет 2.6.14 из сорцов kernel.org,

  make-kpkg --initrd kernel_image,

поставил udev,
написал в /etc/kernel-img.conf:

  do_symlinks = Yes
  do_initrd = Yes
  ramdisk = /usr/sbin/mkinitrd.yaird

- не ставится:

  # dpkg -i kernel-image-2.6.14_10.00.Custom_i386.deb
  Selecting previously deselected package kernel-image-2.6.14.
  (Reading database ... 143443 files and directories currently installed.)
  Unpacking kernel-image-2.6.14 (from kernel-image-2.6.14_10.00.Custom_i386.deb)
  ...

  You are attempting to install an initrd kernel image (version
  2.6.14) while running a kernel of version 2.4.27-2-686, but
  you have no suitable ramdisk generation tool installed among
  /usr/sbin/mkinitrd.yaird.  This will break the installation, unless a
  suitable ramdisk generation tool is also being installed right
  now.

  Could not find . at /var/lib/dpkg/tmp.ci/preinst line 228.
  Setting up kernel-image-2.6.14 (10.00.Custom) ...
  Failed to find suitable ramdisk generation tool for kernel version 2.6.14 on
  running kernel 2.4.27-2-686 in /usr/sbin/mkinitrd.yaird
  dpkg: error processing kernel-image-2.6.14 (--install):
   subprocess post-installation script returned error exit status 9
  Errors were encountered while processing:
   kernel-image-2.6.14

Но ядро с модулями распаковывается, и я пытаюсь mkinitrd.yaird вызвать
явно:

  # mkinitrd.yaird -o/boot/initrd.img-2.6.14 2.6.14
  yaird error: can't open /proc/bus/input/devices (fatal)


С ядром 2.4.27 нет проблем. Я совершенно не понимаю, что тут происходит
и что мне нужно делать :(

Спасибо большое!
murla
()

pthread_detach

Привет. Имею такой код:

void* ua_main_thrd(void* arg)
{
    for (;;)
        printf("This is detached thread...\n");
}

int main()
{
    pthread_t tid;
    pthread_create(&tid, NULL, ua_main_thrd, NULL);
    pthread_detach(tid);

    return 0;
}

Если не отсоединять поток, а, напротив, ждать его потом pthread_join(), то второй
поток будет радостно крутиться до бесконечности, а вот в коде, который
здесь приведен, он печатает примерно строчек двадцать (когда как), и программа
после этого завершается. Почему?

Большое человеческое спасибо.
murla
()

Perl: эффективная буферизация

Привет.

Мне нужно на Perl сделать что-то вроде cat, то есть читать бинарные данные и записывать куда-нибудь. Данных может быть очень много, поэтому записать их все в ОЗУ, а потом записать на диск не получится. Делаю следующее:

syswrite OUT, $str while (sysread SRC, $str, 1_000_000);

если OUT сделать псевдонимом STDOUT и шеллом перенаправить этот STDOUT в файл, то это работает раз в шесть-семь (!) быстрее, чем когда я явно открываю OUT через open(). Почему? Я неправильно выбрал размер LENGTH в sysread? Вообще, как наиболее эффективно организовать прямую передачу данных в Perl?

Спасибо.

murla
()

Perl: удаление начала файла

Привет. Хочу преобразовать Nero image в ISO. Я нашел утилитку на С, из сорцов которой видно, что nero image отличается от ISO каким-то довеском впереди фиксированного, который нужно убрать. Прямой путь - открыть .nrg для чтения, сдвинуть seek-ом на начало ISO image, и записать ISO (так эта утилита на С и делает), потом удалить nrg, кторый занимает много места и не нужен. Но, я нашел в Perl Cookbook пример, как можно удалить *хвост* файла, не создавая второй файл - это сделать open(SRC, "<+$fname") и сделать truncate(SRC, $file_size). Можно что-то подобное сделать с началом файла, не переписывая его практически целиком заново?

Спасибо большое.

murla
()

Отладка библиотеки, загружаемой явно

Доброе время суток.

Есть программа (Asterisk PBX), в конфигурационном файле которой указывается список модулей (разделяемых библиотек), которые она загружает при работе. Мне нужно поковырять одну из этих библиотек (app_voicemail.c):

$ gdb asterisk

(gdb) br app_voicemail.c:1222
No source file named app_voicemail.c.

Что, в общем, понятно. Тогда я загружаю программу, потом выхожу из нее, потом снова устанавлмваю точку останова, на сей раз все нормально:

(gdb) run -c
Asterisk Ready.
*CLI> stop now

Program exited normally.
(gdb) br app_voicemail.c:1222
Breakpoint 1 at 0x40a2e0f2: file app_voicemail.c, line 1222.

И зпускаю опять.

Но выгружать и загружать астериск только для установки точеи не хочется - долго :( Могу ли я приостановить выполнение, установить точку, и снова запустить - все в одном окне?

Спасибо большое!

murla
()

WMAker, xterm и xkb

Привет.

В wmaker, при переключении раскладки на рамке xterm меняется индикатор раскладки, для основной раскладки - буква "Е", для следующей - изображение сердечка. Всего таких раскладки 4, и изображения эти мне не нравятся. Знает кто-нибудь, где они лежат, чтоб их можно было поменять?

Большое спасибо.

murla
()

Детальное знакомство с компоновской

Здравствуйте.

Хочу в деталях ознакомиться с процессом компоновки g++, в том числе - чем этот процесс в Linux отличается от такового с MinGW в Win32? какие проблемы могут быть при компоновке с библиотеками, собранными другими компиляторами?

Где про все это можно почитать в Инете? На русском, английском - неважно.

Огромное спасибо!

murla
()

VmWare: увеличить размер диска.

Привет.

Попробовал сабж в VmWare 4.5.2 (с 5 до 10Гб):

vmware-vdiskmanager -x 10GB winXPHome.vmdk

Теперь VmWare говорит, что все ОК, Disk capacity теперь 10 Гб, а виртуальная вынь (WinXP Home) по-прежнему утверждает, что у нее всего 5 Гб. Что я еще забыл сделать?

Спасибо огромное.

murla
()

Sound troubles with VmWare

Здравствуйте.

Имеется VmWare 4.0.0 с Windows2000 Server. При попытке проиграть там что-нибудь всплывает сообщение, "Не удается воспроизвести звуковой поток, звуковое устройство отсутствует либо не отвечает". Пробовал в хост-системе (Линуксе) как загружать, так и выгружать звуковы дрова - все то же самое. Как лечить?

Спасибо.

murla
()

Шрифт в менюшках konqueror

Здравствуйте.

Как поменять subj? Прошу прощения, я в Qt не разбираюсь, и konqueror - это единственное приложение на Qt, которое я использую.

Спасибо!

murla
()

sim: настройка шрифтов

Здравствуйте.

Решил попробовать sim, а как увеличить размер шрифтов, не нашел. Это возможно?
Спасибо!

murla
()

Vim, syntax highlighting

Привет.

Хочу, чтобы синтаксис файла с расширением .xxx подсвечивался так же, как синтаксис С. Как это сделать?

Спасибо.

murla
()

C++: установка состояния ifstream

Доброе время суток.

У меня есть поток ifstram ifstr, прикрепленный к файлу для чтения. Я прочел файл один раз, хочу снова прочесть. Как? Я нашел в <iostream> функции ifstream::seekg(...) и ifstream::tellg(), пробую сказать ifstr.seekg(0) - бесполезно, все равно ifstr.tellg() говорит -1. Даже пробовал ifstr.close() и ifstr.open(fname) - все равно и после этого ifstr.tellg() == -1.

Спасибо!

murla
()

Perl: узнать имя считываемого файла

Добрый день.

Хочу внутри инструкции while(<>) {...} узнать, из какого файла в настоящий момент считываются данные. Просмотрел perlvar - может, в какую-то переменную заносится его имя - не нашел. Или плохо смотрел?

Спасибо.

murla
()

C++: считывание из строки данных в массив

Здравствуйте.

Сабж в С делается таким образом:

char s[] = "1 2 3 4 5";
double x[5];
sscanf(s, "%lf %lf %lf %lf %lf", &x[0], &x[1], &x[2], &x[3], &x[4]);

Как это сделать "покрасивше" и средствами C++? Пусть вместо char[] s, будет string s, а вместо x[] - valarray<double> x, и нужно этот x заполнить. Размер x заранее указывать тоже не хочется ;)

Спасибо!

murla
()

Статические члены классов в С++

Доброе время суток.

Собираю разделяемую библиотеку с классом

class TComponent {
public:
   // ...
   TEvent GetEvent() { return fEvent; }
private:
   static TEvent fEvent;
};

собирается, но потом выдает ошибку линковки:
undefined reference to `TComponent::fEvent'

убираю static перед TEvent fEvent - и все линкуется нормально. В чем
дело? Спасибо!

(компилятор g++ 3.3.4, Debian)
    
murla
()

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