Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Опять segmentation fault. / 16 сообщений из 16, страница 1 из 1
28.05.2005, 21:55
    #33089187
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять segmentation fault.
В книжке по программазму под линух нашёл пример, как стандартный вывод проги переопределяется на другой процесс. Там с sort'ом пример был. Решил, немного изменив прогу, отловить в своём процессе стандартный вывод процесса ifconfig. А получилось segmentation fault. Вот код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

int main(){
	int fds[ 2 ];
	pid_t pid;
	pipe(fds);
	pid = fork();
	if (pid == (pid_t)  0 ){
		close(fds[ 0 ]);
		dup2(fds[ 1 ], STDOUT_FILENO);
		execlp("ifconfig", "ifconfig",  0 );
	}
	else {
		FILE* stream;
		char** conf;
		close(fds[ 1 ]);
		stream = fdopen (fds[ 0 ], "r");
		fscanf(stream, "%s", &conf);
		printf("%s", conf);
		close(fds[ 0 ]);
		waitpid(pid, NULL,  0 );
	}
	return  0 ;
}
...
Рейтинг: 0 / 0
28.05.2005, 22:07
    #33089193
Землекоп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять segmentation fault.
Может
Код: plaintext
1.
2.
3.
4.
5.
 		
                          char conf[сколько нужно байт];
		close(fds[ 1 ]);
		stream = fdopen (fds[ 0 ], "r");
		fscanf(stream, "%s", conf);
...
Рейтинг: 0 / 0
28.05.2005, 23:01
    #33089217
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять segmentation fault.
Докладываю.
Под рутом вываливается не сегментейшн фаулт, а просто чешуя какая. Вот такая точнее: U┴ЕWVS┐ЛLХ]O. А после изменений, которые та предложил внести стало появлятся два пробела, буква е и приглашение на ввод команд. Но самый прикол, что через несколько секунд чешуя эта (два пробела и е) пропала. Как буддто и не было ничего.
...
Рейтинг: 0 / 0
29.05.2005, 09:26
    #33089294
Землекоп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять segmentation fault.
SarinДокладываю.
Под рутом вываливается не сегментейшн фаулт, а просто чешуя какая. Вот такая точнее: U┴ЕWVS┐ЛLХ]O. А после изменений, которые та предложил внести стало появлятся два пробела, буква е и приглашение на ввод команд. Но самый прикол, что через несколько секунд чешуя эта (два пробела и е) пропала. Как буддто и не было ничего.

Может размер массива маленький задал?

У меня под Solaris все работает. Linux под рукой нет.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

int main(){
        int fds[ 2 ];
        pid_t pid;
        pipe(fds);
        pid = fork();
        if (pid == (pid_t)  0 ){
                close(fds[ 0 ]);
                dup2(fds[ 1 ],  STDOUT_FILENO);
                execlp("ifconfig", "ifconfig",  0 );
        }
        else {
                FILE* stream;
                char conf[ 4096 ];
                close(fds[ 1 ]);
                stream = fdopen (fds[ 0 ], "r");
                fscanf(stream, "%s",conf);
                printf("%s", conf);
                close(fds[ 0 ]);
                waitpid(pid, NULL,  0 );
        }
        return  0 ;
}



...
Рейтинг: 0 / 0
29.05.2005, 09:44
    #33089297
v6y
v6y
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять segmentation fault.
SarinДокладываю.
Под рутом вываливается не сегментейшн фаулт, а просто чешуя какая. Вот такая точнее: U┴ЕWVS┐ЛLХ]O. А после изменений, которые та предложил внести стало появлятся два пробела, буква е и приглашение на ввод команд. Но самый прикол, что через несколько секунд чешуя эта (два пробела и е) пропала. Как буддто и не было ничего.

Попробуй так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

int main(){
        int fds[ 2 ];
        pid_t pid;
        pipe(fds);
        pid = fork();
        if (pid == (pid_t)  0 ){
                close(fds[ 0 ]);
                dup2(fds[ 1 ], STDOUT_FILENO);
                execlp("ifconfig", "ifconfig",  0 );
        }
        else {
                FILE* stream;
                char conf[ 1024 ];
                close(fds[ 1 ]);
                stream = fdopen (fds[ 0 ], "r");
                while (fgets(conf,sizeof(conf)- 1 ,stream)) {
                  printf("Got: %s", conf);
                }
                close(fds[ 0 ]);
                waitpid(pid, NULL,  0 );
        }
        return  0 ;
}

Если будешь запускать не от рута, то в execlp укажи полный путь к ifconfig (e.g. /sbin/ifconfig)
...
Рейтинг: 0 / 0
30.05.2005, 00:27
    #33089698
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять segmentation fault.
Бредовый вывод пропал. Вывода вообще больше нет.
...
Рейтинг: 0 / 0
30.05.2005, 13:22
    #33090572
Yet another cat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять segmentation fault.
Закрыл stdout и ждешь вывода?
Код: plaintext
dup2(fds[ 1 ], STDOUT_FILENO);

поменяй местами входные параметры:
Код: plaintext
dup2(STDOUT_FILENO, fds[ 1 ]);
=====
Cat и его покойный друг Chicago
...
Рейтинг: 0 / 0
30.05.2005, 13:28
    #33090583
Yet another cat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять segmentation fault.
Хотя не... вру. Это же stdout, а не stdin
=====
Cat и его покойный друг Chicago
...
Рейтинг: 0 / 0
30.05.2005, 14:01
    #33090678
v6y
v6y
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять segmentation fault.
SarinБредовый вывод пропал. Вывода вообще больше нет.
Полный путь к ifconfig указал?
...
Рейтинг: 0 / 0
31.05.2005, 00:04
    #33091583
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять segmentation fault.
v6yПолный путь к ifconfig указал?
Я из под рута запускал.
...
Рейтинг: 0 / 0
31.05.2005, 00:06
    #33091585
Землекоп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять segmentation fault.
Sarin v6yПолный путь к ifconfig указал?
Я из под рута запускал.

Не в руте счастье. если просто набрать ifconfig<enter>, то запустится?
...
Рейтинг: 0 / 0
31.05.2005, 00:17
    #33091589
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять segmentation fault.
Под рутом да. Под юзером нет.
...
Рейтинг: 0 / 0
31.05.2005, 00:21
    #33091590
Землекоп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять segmentation fault.
SarinПод рутом да. Под юзером нет.
Попробуй на каких-нибудь других компах. У меня работает и под Linux, и под Solaris без проблем.
...
Рейтинг: 0 / 0
31.05.2005, 10:14
    #33091885
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять segmentation fault.
Для отладки и поиска ошибки в этой проге понадобилось выполнить невыполнимое. Найти второй комп с Линухом:)
...
Рейтинг: 0 / 0
31.05.2005, 10:40
    #33091957
Землекоп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять segmentation fault.
SarinДля отладки и поиска ошибки в этой проге понадобилось выполнить невыполнимое. Найти второй комп с Линухом:)

Можно на первом снести Linux и поставить еще раз. Ну, это если совсем грустно станет. Для начала проверь код возврата execlp("ifconfig", "ifconfig", 0); ,если равен -1, то ifconfig не запускается по причине, которую смотри по errno.
Еще для эксперимента замени вызов execlp на printf("Hello"); и посмотри распечатается ли это Hello на экране.
...
Рейтинг: 0 / 0
31.05.2005, 10:57
    #33092007
v6y
v6y
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять segmentation fault.
SarinДля отладки и поиска ошибки в этой проге понадобилось выполнить невыполнимое. Найти второй комп с Линухом:)
Попробуй все таки указать полный путь к ifconfig... Или вызови ls
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Опять segmentation fault. / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]