powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Опять segmentation fault.
16 сообщений из 16, страница 1 из 1
Опять segmentation fault.
    #33089187
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В книжке по программазму под линух нашёл пример, как стандартный вывод проги переопределяется на другой процесс. Там с 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
Опять segmentation fault.
    #33089193
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может
Код: plaintext
1.
2.
3.
4.
5.
 		
                          char conf[сколько нужно байт];
		close(fds[ 1 ]);
		stream = fdopen (fds[ 0 ], "r");
		fscanf(stream, "%s", conf);
...
Рейтинг: 0 / 0
Опять segmentation fault.
    #33089217
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Докладываю.
Под рутом вываливается не сегментейшн фаулт, а просто чешуя какая. Вот такая точнее: U┴ЕWVS┐ЛLХ]O. А после изменений, которые та предложил внести стало появлятся два пробела, буква е и приглашение на ввод команд. Но самый прикол, что через несколько секунд чешуя эта (два пробела и е) пропала. Как буддто и не было ничего.
...
Рейтинг: 0 / 0
Опять segmentation fault.
    #33089294
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Опять segmentation fault.
    #33089297
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Опять segmentation fault.
    #33089698
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бредовый вывод пропал. Вывода вообще больше нет.
...
Рейтинг: 0 / 0
Опять segmentation fault.
    #33090572
Фотография Yet another cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Закрыл stdout и ждешь вывода?
Код: plaintext
dup2(fds[ 1 ], STDOUT_FILENO);

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

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

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


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