[Linux] Попытка разобраться с псевдотерминалами pts'98 (linux tty terminal)
Ключевые слова: linux , tty , terminal , (найти похожие документы )
_ RU.UNIX (2:5077/15.22) _____________________________________________ RU.UNIX _
From : Serg Ostapenko 2:5020/400 01 Dec 99 18:33:22
Subj : [Linux] Попытка разобраться с псевдотерминалами pts'98
________________________________________________________________________________
From: "Serg Ostapenko" <osix@permonline.ru >
Здраствуйте.
Имею: Red Hat 6.0, kernel - 2.2.15-5 + в ядре включена поддержка Unix pts'98
Раньше в СКО 3.0 была написана задача, которая переключала ввод-вывод с
текущего терминала на другой (с одной виртуальной консоли на другую).
Устройства назывались tty. В связи с перездом на Линукс возникла проблема -
эта задача корректно не работает под Х и псевдотерминалами.
Вопросы:
По Линуксу
1. Могу ли я отключить поддержку pts'98? Hа каких тогда терминалах будет
запускаться xterm?
2. В ядре отключил поддержку unix terminal'98 и ... не смог построить ядро.
Сругались на неопределенные ссылки в API псевдотерминалов (вроде openpts и
т.д.) ??? Может где еще надо чего сделать???
По программированию
3. Почитал info glibc на предмет открытия псевдотерминала и т.д. Hаписал
программу - все нормально псевдотерминал (первый номер из свободных открыл,
точнее занял номер) есть, но теперь надо туда запустить мою программу, эта
программа интерактивная не иксовая. Что делать? Hиже привожу пример, который
я написал, может он лучше покажет, что я сделал...
/*
* Попытка разобраться с псевдотерминалами
*
* Остапенко С. В.
* 991130
*
* Linux RH 6.0
* kernel 2.2.13
* egcs-1.1.2
*
*/
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
void main()
{
int master, /* master terminal */
slave; /* slave terminal */
char* slave_name; /* name slave pseudo-terminal */
// Open master
if( (master = getpt()) < 0)
{
perror("Can't open master pts!\n");
close(master);
exit(1);
}
// Changes ownership and permissions for master pseudo-terminal and unlock
slave
if( grantpt(master)<0 || unlockpt(master)<0 )
{
perror("Can't change ownership or permissions for master
pseudo-terminal!\n");
close(master);
exit(1);
}
// Get name of slave
if( (slave_name = ptsname(master)) == NULL )
{
perror("Can't get name of slave pseudo-terminal!\n");
close(master);
exit(1);
}
// Open slave
if( (slave = open(slave_name, O_RDWR)) == -1)
{
perror("Can't open slave pts!\n");
close(master);
exit(1);
}
// Write to slave
// Вот здесь я и не понял. Hе работает. Что делать дальше?
if( write(slave, "Hello pts!\n", 11) == -1 )
perror("Can't wrote to slave pts!\n");
printf("\n%s\n", slave_name);
// execlp("xterm", 0);
// getchar();
close(slave);
close(master);
}
В общем задача следующая:
Есть менеджер задач, все задачи взаимодействуют с менеджером через
разделяемую память. Сам менеджер интерактивный - взаимодеиствует с
пользователем. Одна из запускаемых задач тоже интерактивная. Ее
ввод-вывод и надо выкинуть на другой терминал ( в моем случае на другой
х-терминал). Как? Принимаются все советы, нравоучения, ссылки и особенно
примеры.
PS. Подумал и решил добавить скошную задачу.
--
Thanks in advanced
Best regards. Serg
osix AT permonline DOT ru
osix AT raid DOT perm DOT ru
begin 666 Ttyswt.c
M+RH*("H@(/#2S\?2P<W-P2#0Q=+%SL':SL'>P<74(-?7S\0OU]G7S\0@U,72
MS<G.P<S!(,D@VL'0U=/+P<74"B J("#.P2#.Q<T@R \_-P<[$U2X*("HO"@HC
M:6YC;'5D92 \<W1D:6\N:#X*(VEN8VQU9&4@/'-T<FEN9RYH/@HC:6YC;'5D
M92 \<WES+W1Y<&5S+F@^"B-I;F-L=61E(#QS:6=N86PN:#X*(VEN8VQU9&4@
M/&5R<FYO+F@^"B-I;F-L=61E(#QT97)M:6]S+F@^"@IE>'1E<FX@8VAA <BHJ
M("!E;G9I<F]N.R @(" @(" @(" @(" @(" @+RH@S\O2U=;%SLG%(-#2S\/%
MT]/!("HO"@HO*@H@*B @Y,'.SMG%"B J+PH*(V1E9FEN92!M87A!<F<@,C @
M(" @(" @(" @(" @(" @(" @(" @("\J(,W!R]/)S<',V,[/Q2#>R=/,SR#!
MTL?5S<7.U,_7("HO"B-D969I;F4@;6%X16YV(#0P(" @(" @(" @(" @(" @
M(" @(" @(" O*B#-P<O3R<W!S-C.S\4@WLG3S,\@T,72Q<W%SL[9R" J+PH*
M<W1A=&EC(&-H87(J(" @8V]M07)G6VUA>$%R9UT@/2![,'T[(" @("\J(,'2
MQ]7-Q<[4V2#+S\W!SL39("HO"G-T871I8R!C:&%R*B @(&-O;45N=EMM87A%
M;G9=.R @(" @(" @(" O*B#/R]+5UL7.R<4@R \_-P<[$V2 J+PIS=&%T:6,@
M<&ED7W0@("!C;VU0:60[(" @(" @(" @(" @(" @(" @+RH@R<3%SM3)QLG+
MP=3/TB#+S\W!SL39("HO"@IS=&%T:6,@8VAA<BH@("!T='E.86UE(#T@,#L@
M(" @(" @(" @(" @+RH@R<W1(-3%TLW)SL',P2 J+PIS=&%T:6,@8VAA<B @
M("!T='E%;G9;.#!=(#T@>S!].R @(" @(" @+RH@U,G0(-3%TLW)SL',P2 J
M+PH*<W1A=&EC(&EN=" @(" @<')C3G5M.R @(" @(" @(" @(" @(" @("\J
M(,[/S<72(-K!S<_2P=;)U\'%S<_'SR#0TL_#Q=/3P2 J+PIS=&%T:6,@:6YT
M(" @("!P<F-'<G [(" @(" @(" @(" @(" @(" @+RH@SL_-Q=(@S,G$Q=+!
M(-/%P<[3P2 J+PH*<W1A=&EC($9)3$4J(" @;F5W:6X[(" @(" @(" @(" @
M(" @(" @("\J(-#/U,_+R2#$S-$@R\_-P<[$V2 J+PIS=&%T:6,@1DE,12H@
M("!N97=O=70["G-T871I8R!&24Q%*B @(&YE=V5R<CL*"G-T871I8R!S=')U
M8W0@=&5R;6EO<R @(" @(" @(" @(" @(" @(" O*B#$P<[.V<4@U ,72S<G.
MP<S!.B J+PH)(" @(" @('1E<FU/;&0L(" @(" @(" @(" @(" @(" O*B @
M+2#3U,'2V<4@(" @(" @(" J+PH)(" @(" @('1E<FU.97<[(" @(" @(" @
M(" @(" @(" O*B @+2#.S]?9Q2 @(" @(" @(" J+PH*=F]I9"!T;U]C;VTH
M<VEG*2 @(" @(" @(" @(" @(" @(" @(" @("\J(-#%TL7$P=3>R<L@T \G'
MSL',S]<@R\_-P<[$Q2 J+PH@("!I;G0@<VEG.PI["B @('-I9VYA;"AS:6<L
M('1O7V-O;2D["B @(&MI;&PH8V]M4&ED+"!S:6<I.PI]"@HO*@H@*B @Y\_,
MS]?.S\H@S<_$U<S8"B J+PH*;6%I;BAA<F=C+"!A<F=V*0H@("!I;G0@(" @
M(&%R9V,["B @(&-H87(J*B @87)G=CL*>PH@("!C:&%R(" @<ULR-39=.PH@
M("!I;G0@(" @:2QN.PH@("!&24Q%*B @9FEL93L*"B @(&-H87(J(" @<W)C
M.R @(" @(" @(" @(" @(" @(" @(" @(" O*B#)T]3/WL[)RR#+S\W!SL3.
MS\H@T]32S\O)("HO"B @(&-H87(J*B @9'-T.R @(" @(" @(" @(" @(" @
M(" @(" @(" O*B#0TLG%S<[)RR#3U-+/R\D@*B\*"0D)"0DO*B#2P=K"S](@
MR\_-P<[$SL_*(-/4TL_+R2 J+PH@("!F;W(H:3TP+"!N/3$L('-R8STP+"!D
M<W0],#L@,3L@<W)C/7-T<G1O:R@P+"(@7'0B*2D*(" @>PH@(" @("!I9B@A
M<W)C*2![(" @(" @(" @(" @(" @(" @(" @(" @+RH@U]G"S]++P2#)T]3/
MWL[)R\$@*B\*"2!I9B@K*VD@/CT@87)G8RD*"2 @("!B<F5A:SL*"2!S<F,@
M/2!S=')T;VLH87)G=EMI72PB(%QT(BD["B @(" @('T*"B @(" @(&EF*&1S
M="D@>R @(" @(" @(" @(" @(" @(" @(" @(" O*B#:P=#/S,[%SLG%(-#2
MR<7-SLG+P2 J+PH)(&EF*"ID<W0I('L*"2 @("!F<')I;G1F*'-T9&5R<BPB
M\,72Q<_0TL7$Q<S%SLG%(-#%TL7-Q<[.S\H@)7-<;B(L*F1S="D["@D@(" @
M97AI="A%24Y604PI.PH)('T*"2 J9'-T(#T@<W)C.PH)(&1S=" @/2 P.PH)
M(&-O;G1I;G5E.PH@(" @("!]"@H@(" @("!I9BAS<F-;,%T]/2<M)RD@(" @
M(" @(" @(" @(" @(" @+RH@TL':PL_2(,O/S<'.Q-D@*B\*"2!S=VET8V@H
M<W)C6S%=*2!["@D@(" @8V%S92 G8R<Z(&1S=" ]("9C;VU!<F=;,%T["@D)
M(" @(" @8V]N=&EN=64["@D@(" @8V%S92 G="<Z(&1S=" ]("9T='E.86UE
M.PH)"2 @(" @(&-O;G1I;G5E.PH)(" @(&1E9F%U;'0Z("!F<')I;G1F*'-T
M9&5R<BPB[L70TL'7R<S8SMG*(,;,P<<@)6-<;B(L<W)C6S%=*3L*"0D@(" @
M("!E>&ET*$5)3E9!3"D["@D@?0H*(" @(" @:68H;B \(&UA>$%R9RD@(" @
M(" @(" @(" @(" @(" @("\J(-#!TL'-Q=32V2#+S\W!SL39("HO"@D@8V]M
M07)G6VXK*UT@/2!S<F,["B @(" @(&5L<V4@>PH)(&9P<FEN=&8H<W1D97)R
M+"+SS,G;R\_-(,W.S\?/(,'2Q]7-Q<[4S]=<;B(I.PH)(&5X:70H13)"24<I
M.PH@(" @("!]"B @('T*(" @8V]M07)G6VY=(#T@,#L*"B @(&EF*"%C;VU!
M<F=;,%T@?'P@(71T>4YA;64@?'P@9'-T*2![(" O*B#0TL_7Q=++P2 J+PH@
M(" @("!F<')I;G1F*'-T9&5R<BPBYL_2S<'4(-#%TL7+S,#>P=3%S-$@U,72
MS<G.P<S!.B E<R(L(&%R9W9;,%TI.PH@(" @("!F<')I;G1F*'-T9&5R<BPB
M("UC(#S+S\W!SL3!/B!;/-#!TL'-Q=32V3Y=("UT(#S4Q=+-R<[!S#Y<;B(I
M.PH@(" @("!F<')I;G1F*'-T9&5R<BPB(,?$Q2 \R\_-P<[$P3X@(" M(,G-
MT2#:P=#5T\O!Q<W/RB#+S\W!SL397&XB*3L*(" @(" @9G!R:6YT9BAS=&1E
M<G(L(B @(" @/-#!TL'-Q=32V3X@+2#0P=+!S<74TMD@R \_-P<[$V5QN(BD[
M"B @(" @(&9P<FEN=&8H<W1D97)R+"(@(" @(#S4Q=+-R<[!S#X@("T@R<W1
M(-3%TLW)SL',P2#$S-$@W-3/RB#+S\W!SL397&XB*3L*(" @(" @97AI="@Q
M*3L*(" @?0H*(" @9F]R*&D],#L@96YV:7)O;EMI73L@:2LK*2 @(" @(" @
M(" @("\J(-/&S]+-R=+/U\'4V"#/R]+5UL7.R<4@*B\*(" @(" @:68H:3QM
M87A%;G8I"B @(" @('L*"2!C;VU%;G9;:5T@/2!E;G9I<F]N6VE=.PH@(" @
M(" @(" O+R!P<FEN=&8H(B5S7&XB+"!C;VU%;G9;:5TI.PH@(" @("!]( H@
M(" @("!E;'-E('L*"2!F<')I;G1F*'-T9&5R<BPB\\S)V\O/S2#-SL_'SR#0
MQ=+%S<7.SMG((,_+TM76Q<[)T5QN(BD["@D@97AI="A%,D))1RD["B @(" @
M('T*(" @8V]M16YV6VE=(#T@,#L*"0D)"0DO*B#5VL[!U-@@SL_-Q=(@T-+/
MP\73T\$@*B\*(" @<W!R:6YT9BAS+" B<',@+70@)7,B+"!T='E.86UE*3L@
M(" @("\J("#.P2#4Q=+-R<[!S,4@(" @(" @(" J+PH@("!F:6QE(#T@<&]P
M96XH<RPB<B(I.PH@("!I9B@A9FEL92!\? H@(" @("!F<V-A;F8H9FEL92PB
M)2IS)2IS)2IS)2IS(BD@/3T@14]&('Q\"B @(" @(&9S8V%N9BAF:6QE+"(E
M=24J<R4J<R4J<R(L)FDI(#T]($5/1BD*(" @>PH@(" @("!F<')I;G1F*'-T
M9&5R<BP@(N[%U"#4P<O/Q\\@U,72S<G.P<S!("5S7&XB+"!T='E.86UE*3L*
M(" @(" @97AI="A%3EA)3RD["B @('T*(" @<')C1W)P(#T@:3L@(" @(" @
M(" @(" @(" @(" @(" @(" @("\J(,S)Q,72(-/%P<[3P2 J+PH@("!D;PH@
M(" @("!P<F-.=6T@/2!I.PH@("!W:&EL92AF<V-A;F8H9FEL92PB)74E*G,E
M*G,E*G,B+"9I*2 A/2!%3T8I.PH@("!P8VQO<V4H9FEL92D["@H@("!F:6QE
M(#T@9F]P96XH(B]E=&,O='1Y='EP92(L(")R(BD[(" @+RH@U=K.P=38(-3)
MT"#4Q=+-R<[!S,$@*B\*(" @:68H9FEL92D@>PH@(" @("!C:&%R(',R6S(P
M73L*(" @(" @=VAI;&4H9G-C86YF*&9I;&4L(B5S)7,B+',L<S(I(3U%3T8I
M('L*"2!I9B@A<W1R8VUP*',R+"!T='E.86UE*2D@>PH)(" @(&9O<BAI/3 [
M(&-O;45N=EMI73L@:2LK*0H)(" @(" @(&EF*"%S=')N8VUP*&-O;45N=EMI
M72PB5$5232(L-"DI('L*"0D@('-P<FEN=&8H='1Y16YV+" B5$5233TE<R(L
M(',I.PH)"2 @8V]M16YV6VE=(#T@='1Y16YV.PH)"2 @8G)E86L["@D@(" @
M(" @?0H)(" @(&)R96%K.PH)('T*(" @(" @?0H@(" @("!F8VQO<V4H9FEL
M92D["B @('T*"B @(&EF*"%T='E%;G9;,%TI('L*(" @(" @9G!R:6YT9BAS
M=&1E<G(L("(E<UQN(BP@='1Y16YV6S!=*3L*(" @(" @9G!R:6YT9BAS=&1E
M<G(L(N[%(,W/Q]4@U=K.P=38(-3)T"#4Q=+-R<[!S,$@)7-<;B(L='1Y3F%M
M92D["B @(" @(&5X:70H14Y824\I.PH@("!]"@H@("!S<')I;G1F*',L(B]D
M978O)7,B+'1T>4YA;64I.R @(" @(" @+RH@T,72Q<[!VL[!WLG4V"#0S]3/
MR\D@*B\*(" @:68H*&YE=VEN(" ](&9R96]P96XH<RPB<B(L<W1D:6XI*2 @
M)B8*(" @(" @*&YE=V]U=" ](&9R96]P96XH<RPB=R(L<W1D;W5T*2D@)B8*
M(" @(" @*&YE=V5R<B ](&9R96]P96XH<RPB=R(L<W1D97)R*2D@)B8*(" @
M(" @(71C9V5T871T<BAF:6QE;F\H;F5W:6XI+"9T97)M3VQD*2 F)@H@(" @
M(" A=&-G971A='1R*&9I;&5N;RAN97=I;BDL)G1E<FU.97<I*0H@("!["B @
M(" @(&-O;5!I9" ](&9O<FLH*3L@(" @(" @(" @(" @(" @(" O*B#0S]+/
MQ,G4V"#0TL_#Q=/3("HO"B @(" @(&EF*&-O;5!I9"D@>R @(" @(" @(" @
M(" @(" @(" @(" O*B#/U,7#("HO"@D@<VEG;F%L*%-)1TE.5"P@=&]?8V]M
M*3L@(" @(" @("\J(,[!T]32S\G4V"#3R<?.P<S9("HO"@D@<VEG;F%L*%-)
M1U%5250L=&]?8V]M*3L*"2!S:6=N86PH4TE'5$5232QT;U]C;VTI.PH)('-I
M9VYA;"A324=54U(Q+'1O7V-O;2D["@D@<VEG;F%L*%-)1U534C(L=&]?8V]M
M*3L*"@D@=VAI;&4H=V%I="@F:2D@(3T@8V]M4&ED*3L@(" @("\J(-;$P=38
M(-/-Q=+4R2#3V<[!("HO"@D)"0D)+RH@U\_3T]3!SL_7R=38(-#2Q=;.Q<4@
MT\_3U,_1SLG%("HO"@D@<WES=&5M*")T<'5T(&EN:70[('1P=70@8VQE87(B
M*3L*"2!I9BAN97=I;B F)B!N97=O=70@)B8@;F5W97)R*2!["@D@(" @=&-S
M971A='1R*&9I;&5N;RAN97=I;BDL5$-304Y/5RPF=&5R;4]L9"D["@D@(" @
M9F-L;W-E*&YE=VEN*3L*"2 @("!F8VQO<V4H;F5W;W5T*3L*"2 @("!F8VQO
M<V4H;F5W97)R*3L*"2!]"@D@:VEL;"AP<F-.=6TL(%-)1T-/3E0I.PH@(" @
M("!](&5L<V4@>R @(" @(" @(" @(" @(" @(" @(" @(" @+RH@T]G.("HO
M"@D@8V9G971I<W!E960H)G1E<FU.97<I.R @(" @(" @("\J(-/>R=3!U-@@
MT\O/TL_3U-@@S\+-Q<[!("HO"@D@8V9G971O<W!E960H)G1E<FU.97<I.PH)
M"0D)"2\J(,[!T]32S\G4V"#3TL7$U2#4Q=+-R<[!S,$@*B\*(" @(" @(" @
M+R\@26YP=70@;6]D97,*"2!T97)M3F5W+F-?:69L86<@?#T@24-23DP@?"!)
M6$].('P@25A/1D8@?"!)1TY005(@?"!"4DM)3E0["@D@=&5R;4YE=RYC7VEF
M;&%G("8]?BA)4U1225 @?"!)3DQ#4B!\($E'3D-2('P@4$%235)+('P@24=.
M0E)+('P*"0D)(" @("!)3E!#2RD["@D@+R\@3W5T<'5T(&UO9&5S"B @(" @
M(" @('1E<FU.97<N8U]O9FQA9R!\/2!/4$]35"!\($].3$-2.PH)('1E<FU.
M97<N8U]O9FQA9R F/7Y/0U).3#L*(" @(" @(" @"B @(" @(" @("\O($-O
M;G1R;VP@;6]D97,*"2!T97)M3F5W+F-?8V9L86<@?#T@0TQ/0T%,('P@0U)%
M040@?"!#4S@@?"!(55!#3#L*"2!T97)M3F5W+F-?8V9L86<@)CU^*$-35$]0
M0B!\(%!!4D5.0B!\(%!!4D]$1"D["B @(" @(" @( H@(" @(" @(" O+R!,
M:6YE(&1I<V-I<&QI;F4@;6]D97,*"2!T97)M3F5W+F-?;&9L86<@?#T@14-(
M3R!\($5#2$]%('P@14-(3TL@?"!)0T%.3TX@?"!)4TE'('P@5$]35$]0.PH)
M('1E<FU.97<N8U]L9FQA9R F/7XH14-(3TY,('P@24585$5.('P@3D]&3%-(
M*3L*"2 *(" @(" @(" @+R\@0V]N=')O;"!C:&%R86-T97)S"B @(" @(" @
M('1E<FU.97<N8U]C8UM614]&72 @(#T@0T5/1CL*"2!T97)M3F5W+F-?8V-;
M5D5205-%72 ]($-%4D%313L*"2!T97)M3F5W+F-?8V-;5DE.5%)=(" ]($-)
M3E12.PH)('1E<FU.97<N8U]C8UM62TE,3%T@(#T@0TM)3$P["@D@=&5R;4YE
M=RYC7V-C6U9154E472 @/2!#455)5#L*"2!T97)M3F5W+F-?8V-;5E-54U!=
M(" ]($-355-0.PH)('1E<FU.97<N8U]C8UM64U1!4E1=(#T@0U-405)4.PH)
M('1E<FU.97<N8U]C8UM64U1/4%T@(#T@0U-43U ["@H)('1C<V5T871T<BAF
M:6QE;F\H;F5W:6XI+%1#4T%.3U<L)G1E<FU.97<I.PH)"0D)"2\J(-#/Q,?/
MU,_7R=38(,D@VL'0U=/4R=38(-#2S\/%T],@*B\*"2!K:6QL*'!R8TYU;2P@
M4TE'4U1/4"D["@D@<V5T<&=I9"AC;VU0:60L<')C1W)P*3L*"2!S>7-T96TH
M(G1P=70@:6YI=#L@='!U="!C;&5A<B(I.PH)(&5X96-V92AC;VU!<F=;,%TL
@(&-O;4%R9RQC;VU%;G8I.PH@(" @("!]"B @('T*?0H`
`
end
--- ifmail v.2.14dev3
* Origin: Demos online service (2:5020/400)
2 , Igor (? ), 06:56, 30/07/2002 [ответить ]
+ /–
Sorry, for the prevoius strangely encripted message. Something doesn't work in my mozilla...
1. It's strange you had problems with kernel. It must compile fine. Check the configure options again.
2. You can always disable the pts even you have its support in your kernel by removing it from the /etc/fstab:
#none /dev/pts devpts gid=5,mode=620 0 0
3. But even with this your program Ttyswt give an error message:
e.g. Ttyswt -c who -t ttyp2
"Slishkom mnogo peremennih okruzhenija"