1 名前:名無し募集中。。。 [05/01/15 02:18:37] UNIXおよびUNIX clone環境一般のプログラミングに関する質問スレッド 前スレ Part4 pc5.2ch.net/test/read.cgi/tech/1095843584/ Part3 pc5.2ch.net/test/read.cgi/tech/1085930894/ Part2 pc5.2ch.net/test/read.cgi/tech/1055110889/ Part1 pc2.2ch.net/tech/kako/992/992057422.html Part3のミラー makimo.to/2ch/pc5_tech/1085/1085930894.html Part2のミラー makimo.to/2ch/pc5_tech/1055/1055110889.html 関連スレ Cygwin使っている人いますか? その13 (UNIX板) pc5.2ch.net/test/read.cgi/unix/1099157755/ Cygwin使っている人いますか? 3 (Windows板) pc5.2ch.net/test/read.cgi/win/1090131123/ 関連板 pc5.2ch.net/unix/ pc5.2ch.net/linux/
2 名前:名無し募集中。。。 [05/01/15 02:19:15] 【POSiX】 The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004 Edition www.opengroup.org/onlinepubs/009695399/toc.htm 【必読書】 Advanced Programming in the UNIX(R) Environment www.amazon.com/exec/obidos/tg/detail/-/0201563177/ Unix Network Programming Vol. 1: The Sockets Networking API, Third Edition www.amazon.com/exec/obidos/tg/detail/-/0131411551/ UNIX Network Programming Volume 2: Interprocess Communications (2nd Edition) www.amazon.com/exec/obidos/tg/detail/-/0130810819/
3 名前:名無し募集中。。。 [05/01/15 02:20:16] man on www www.linux.or.jp/JM/#Search GNU Make 日本語リファレンス www.ecoop.net/coop/translated/GNUMake3.77/make_toc.jp.html Unix Programming Frequently Asked Questions 日本語訳 www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_toc.html
4 名前:名無し募集中。。。 [05/01/15 02:20:51] 関連スレ追加 ネットワークプログラミング相談室 Port12 pc5.2ch.net/test/read.cgi/tech/1102427855/ マルチスレッドプログラミング相談室 その3 pc5.2ch.net/test/read.cgi/tech/1098268137/
5 名前:名無し募集中。。。 [05/01/15 02:22:57] /◇ oノハヽo /◇◇ 从*・ 。.・) / ◇ ◇ センター試験がんばってね /o y/ |`p し!|||ii|||J |||||||||
6 名前:名無し募集中。。。 mailto:sage [05/01/15 02:24:17] 空気読まずに立てちゃったけどOK?
7 名前:デフォルトの名無しさん mailto:sage [05/01/15 02:27:18] いやでも、 UNIXで挫折って、わかる気がするなあ。 ずっと意味不明なコマンドの文字列打ってたら頭おかしくなりそうだし、 ずっと真っ暗なコンソール眺めてると鬱になりそうじゃん? かといって思想のまるでないXは、オタ絵とただ沢山コンソール開くしか脳ないし、 こんなの与えても娯楽を常に要求する一般人は見向きもしない。 そもそもWebでしか見掛けない、哀れなOS、というのが一般人の見解だし。 そうそう、最近LindowsがUNIXの印象かなり悪くしたよね。 この事件でUNIXはビジネスで成功できないことがまた証明されてしまったわけだ。 昔からUNIXは関係者同士で常に足を引っ張って成長しない。 お金の匂いしないよね。全然。 そんなOSだから、挫折が常態であるのは必然なんだと思う。
8 名前:デフォルトの名無しさん mailto:sage [05/01/15 02:27:53] ほらきた。 UNIX使いって貶されると、 すぐ言葉少なになるよね。 もう貶されるのに慣れちゃった? ちょっと、心をおちつけて。 UNIXを知らなかったあの頃を思い出してごらん。 あの頃の君達は希望に満ち溢れていたよね。 そう、今まで君達は、とっても悪い夢を見ていたんだ。 UNIXなんか捨てて、あの頃見ていた希望を取り戻そうよ!
9 名前:デフォルトの名無しさん mailto:sage [05/01/15 02:50:47] >>1 乙
10 名前:デフォルトの名無しさん [05/01/15 15:25:13] どこの板の名無しだよ
11 名前:デフォルトの名無しさん mailto:sage [05/01/15 15:39:53] >>6 問題なし。 前スレのpc5.2ch.net/test/read.cgi/tech/1095843584/944 GNUは仕様だけじゃなくて、こうしましょうってガイドラインも出してるよ。 www.sra.co.jp/wingnut/standards-j_toc.html ちなみに--に決めた時は、(+って候補もあった) メーリングリストで投票していた。ストの仕切りで。
12 名前:デフォルトの名無しさん mailto:sage [05/01/15 17:16:03] モーヲタがUNIX使う時代なのか
13 名前:デフォルトの名無しさん mailto:sage [05/01/19 15:11:41 ] ここら辺もテンプレに入れとかない? Advanced Programming in the UNIX(R) Environment 和訳 www.amazon.co.jp/exec/obidos/ASIN/4894713195/ Unix Network Programming 和訳 www.amazon.co.jp/exec/obidos/ASIN/4894712059/ www.amazon.co.jp/exec/obidos/ASIN/4894712571/ UNIX プログラミング環境 www.amazon.co.jp/exec/obidos/ASIN/4871483517/
14 名前:デフォルトの名無しさん mailto:sage [05/01/19 15:16:21 ] あと俺、これも好きなんだけどねえ。 UNIX システムコールプログラミング www.amazon.co.jp/exec/obidos/ASIN/487148260X/ 古いから、今のとの相違点をマニュアルと比較しながらでないと 使えないんだけど。逆にそれができる香具師には、単純だった頃の UNIX の姿から学習できるから、かえって入門に向いてる気がする んだが。
15 名前:デフォルトの名無しさん mailto:sage [05/01/19 15:30:05 ] ちなみに↑は去年新版が出たんだが(20年ぶりくらい?) 和訳の予定ってないんかなあ。 最近、原著で読み通すほどの暇と気力がない。orz www.amazon.com/exec/obidos/tg/detail/-/0131411543/
16 名前:デフォルトの名無しさん mailto:sage [05/01/19 21:06:44 ] ここ2,3年の間にUNIXのプログラミング題材にした書籍が アメリカで何冊か出てるよね。
17 名前:デフォルトの名無しさん mailto:sage [05/01/19 23:27:33 ] Linuxのみだけど、↓これもなかなかいい内容の本だったよ。 古典的なところをちょっと外れたのも盛り込んでいて。 新人さん向けの本を捜しての斜め読みだけどもね… Linuxプログラミング―例題で学ぶUNIXプログラミング環境のすべて www.amazon.co.jp/exec/obidos/ASIN/4797327014/
18 名前:デフォルトの名無しさん mailto:sage [05/01/19 23:46:23 ] Linux Is Not UniX
19 名前:デフォルトの名無しさん [05/01/28 11:29:30 ] 質問させていただきます Xのプログラムをコンパイルしようとおもったのですが [root@cf root]# gcc -I /usr/X11R6/include -lX11 -L /usr/X11R6/include -I/usr/X11R6/lib -L /usr/X11R6/lib xaa.c -o xaa [root@cf root]# ./a.out Shared object "libX11.so.6" not found といわれて、動作させることができません [root@cf root]# find /usr/X11R6/ -name "libX11.so.6" /usr/X11R6/lib/libX11.so.6 で、libX11.so.6はあるのですが‥ どこか根本的にまちがっているのでしょうか?
20 名前:デフォルトの名無しさん mailto:sage [05/01/28 11:42:56 ] コンパイルする時に-R/usr/X11R6/libするか、 $ env LD_LIBRARY_PATH /usr/X11R6/lib ./a.out あるいは # vi /etc/ld.so.confに/usr/X11R6/lib 加えて、# ldconfig ちなみにその糞OSは何?
21 名前:デフォルトの名無しさん mailto:sage [05/01/28 18:22:34 ] おそらくTurboかと
22 名前:デフォルトの名無しさん mailto:sage [05/01/28 18:46:58 ] >>20 > $ env LD_LIBRARY_PATH /usr/X11R6/lib ./a.out あるいは $ env LD_LIBRARY_PATH=/usr/X11R6/lib ./a.out
23 名前:デフォルトの名無しさん mailto:sage [05/02/02 11:35:16 ] 皆さんに質問で ファイルから設定を読みこむときって皆さんはどうやってますか? width=500 height=600 と、設定ファイルにかかれているとき Perlなら、widthを変数名に、500を値にいれていたのですが C言語ではどうするのでしょうか? もしよろしければ適当にソースを書いていただければ幸です
24 名前:デフォルトの名無しさん mailto:sage [05/02/02 11:58:14 ] マルチすんなボケ
25 名前:デフォルトの名無しさん [05/02/02 11:59:21 ] >>24 こいつぼけ
26 名前:デフォルトの名無しさん mailto:sage [05/02/02 13:25:31 ] >>23 C言語の初心者スレへ。
27 名前:デフォルトの名無しさん mailto:sage [05/02/03 23:25:08 ] >>19 ./a.out <==./xaa の間違い?
28 名前:デフォルトの名無しさん [05/02/04 12:08:09 ] 詳解UNIXに載ってるIPCの機能は、いまあるメジャーなUNIXでは 殆ど使えてるんでしょうか?それともプロセス間通信はpipeや mmapみたいな基本的なものに限定しておいて、スレッドを使う 方向で考えた方が、推奨されるやり方なのですか?
29 名前:デフォルトの名無しさん mailto:sage [05/02/04 12:43:16 ] >>28 ・使えるんじゃない? ・そうとは思わないけど。
30 名前:デフォルトの名無しさん mailto:sage [05/02/04 16:48:48 ] >>28 POSIX見れ。
31 名前:デフォルトの名無しさん mailto:sage [05/02/04 18:47:12 ] >>30 POSIXに準拠してないOSがあったりするのがUNIXの難しさなのではないですか?
32 名前:デフォルトの名無しさん mailto:sage [05/02/04 19:12:34 ] >>31 いまあるメジャーなUNIXでPOSIXのIPCが使えないのってどれ?
33 名前:デフォルトの名無しさん mailto:sage [05/02/04 19:23:40 ] >>32 それが分らないから質問してるんですけど。
34 名前:デフォルトの名無しさん mailto:sage [05/02/04 20:10:02 ] >>33 そんなのあるのか? って話だと思うけど。 31があると断言しちゃってるけど実際どれよ、FUDじゃねえの? って話じゃないかと。 APUE見りゃちゃんとPOSIXとSysVとBSDで事情がある場合はちゃんと断りがあって、 その上でIPCの機能の記述が通じない「メジャーなUNIX」って一体何を想定してるのか。 元質問者の無知はしょうがないとしても31はちゃんと明確に指摘すべきだろ。
35 名前:デフォルトの名無しさん mailto:sage [05/02/04 21:24:26 ] >>34 あんまり厳密な話をしてるつもりはなったのですが、 例えば、GLIBC-2.3.4には>>2 にあるPOSIXのドキュメントに載っている (www.opengroup.org/onlinepubs/009695399/idx/head.html ) <trace.h>がなかったりします。こんな感じで微妙に基準を満たしてなかったり とかするのかなと思ってました。手元にはLinuxしかないので、 *BSDや商用UNIXのことは分りません。
36 名前:デフォルトの名無しさん mailto:sage [05/02/04 21:36:50 ] すべてのUNIXで動作するコードを書きたいだけなのか?
37 名前:デフォルトの名無しさん mailto:sage [05/02/04 21:45:02 ] >>36 そういうわけではないですけど、何らかの現実的なガイドライン みたいなのがあれば、それを知りたいなあと思っただけです。 本来ならコード読んで体得するべきで怠けているだけなのは分ってます。
38 名前:デフォルトの名無しさん mailto:sage [05/02/05 01:21:14 ] System V IPCがないUNIXがあったら俺の所へ持ってこい!
39 名前:デフォルトの名無しさん [05/02/05 07:29:32 ] アホな質問なんですが、 APUEの10.7,10.8のサンプルコードってちゃんと動きますか? Linux2.6では期待した通りには動きません。 straceで見ると、 readシステムコール中にシグナルが発生しても 普通にreadに戻るだけなんです。
40 名前:デフォルトの名無しさん [05/02/05 07:31:19 ] LinuxはLinux Is Not UniXの略だからなぁ。
41 名前:デフォルトの名無しさん mailto:sage [05/02/05 07:40:35 ] #include<signal.h> #include<unistd.h> static void func(){return;} int main(){ int n=0; char line[256]; signal(SIGALRM,func); alarm(10); n=read(0,line,256); alarm(0); write(1,line,n); } $strace ./a.out ... rt_sigaction(SIGALRM, {0x8048424, [ALRM], SA_RESTORER|SA_RESTART, 0x40046678}, {SIG_DFL}, 8) = 0 alarm(10) = 0 read(0, 0xbffff980, 256) = ? ERESTARTSYS (To be restarted) --- SIGALRM (Alarm clock) @ 0 (0) --- sigreturn() = ? (mask now [RTMIN]) read(0, select使えばいいんだろうけど。
42 名前:デフォルトの名無しさん mailto:sage [05/02/05 08:12:12 ] >>41 ソースの先頭で #define _XOPEN_SOURCE
43 名前:デフォルトの名無しさん mailto:sage [05/02/05 08:26:07 ] >>42 ありがとうございます。 rt_sigaction(SIGALRM, {0x8048434, [], SA_RESTORER|SA_INTERRUPT|SA_NOMASK|SA_ONESHOT, 0x40046678}, {SIG_DFL}, 8) = 0 >>41 と違ってrt_sigactionの引数としてSA_RESTARTの代わりにSA_INTERRUPTが入ってますね。
44 名前:デフォルトの名無しさん mailto:sage [05/02/05 09:29:35 ] 10.12のようにsigaction()でstruct sigactionのsa_flagsに フラグをきっちり指定してやるのが正しいということですな。 signal()のデフォルトの動作はSysV,4.3BSDはINTERRUCT、 SunOS,LinuxはRESTARTということですな。 お騒がせしました。
45 名前:デフォルトの名無しさん mailto:sage [05/02/06 00:07:47 ] 4.xBSDが、restartable system callのご先祖様です。
46 名前:デフォルトの名無しさん mailto:sage [05/02/06 03:52:38 ] >>45 なるほどそうなんですか。 でも、restartable system callを一番最初に実装したのが4.xBSDだとしても、 ここでの、互換性の話を含むsignalの挙動の話はまた別のですよね? そもそも上のようなケースがあるから、UNIXではsignal()はもう使うべきではないですね。 マルチプロセスを想定していない、ANSI C特有の関数としてのsignal(),raise()とみなす べきなのでしょう。UNIXではsigaction(),kill()が正しい。
47 名前:42=45 mailto:sage [05/02/06 09:53:05 ] glibc$ man 2 signal (略) Trying to change the semantics of this call using defines and includes is not a good idea. It is better to avoid signal altogether, and use sigaction(2) instead. signal(2)だけじゃ扱いきれないことが多いですからね。 4.2BSDの頃にはこういう常識が形成されていたと思います。 今手元にないんですが、stevensの"Advanced"にも書いてあったと思います。
48 名前:デフォルトの名無しさん [05/02/08 13:20:03 ] sagarisugi
49 名前:デフォルトの名無しさん [05/02/08 15:18:19 ] XTIの方がUNIXのインターフェイスらすいと思うのですが、 これってもう誰も使ってないんですか?
50 名前:デフォルトの名無しさん [05/02/08 15:57:05 ] らすい?
51 名前:デフォルトの名無しさん [05/02/08 22:40:00 ] pthread使ってるからpopen()とか使うな、っつってるのに使いやがったアホ(上司と同義)のために、 「こう書き換えろう゛ぉけっ!」とアドバイスしたいのですが、どういう書き換え方があるでしょうか?
52 名前:デフォルトの名無しさん mailto:sage [05/02/08 22:45:01 ] 上司を部下に書き換えるとか、勤務先を書き換えるとか
53 名前:デフォルトの名無しさん [05/02/08 22:50:45 ] マジレス希望です。
54 名前:デフォルトの名無しさん mailto:sage [05/02/09 00:02:05 ] 私は popen 使うならシェルからパイプ使えと思う人です
55 名前:デフォルトの名無しさん [05/02/09 01:06:27 ] プロセスを走らせながらDLLって書き換えられますでしょうか。。。 dlopen()等でそういった書き換えが考慮されていないプロセスです。
56 名前:デフォルトの名無しさん mailto:sage [05/02/09 09:06:47 ] 書き換えるのはできないけど、入れ換えるのはできるぞ。 cp libhoge.so /usr/lib/libhoge.so.tmp mv /usr/lib/libhoge.so.tmp /usr/lib/libhoge.so
57 名前:デフォルトの名無しさん mailto:sage [05/02/09 12:19:18 ] 入れ替えられても元のdllはロードされたままの罠。
58 名前:デフォルトの名無しさん mailto:sage [05/02/09 12:25:32 ] 無理やりmunmapしてしまうとか。
59 名前:デフォルトの名無しさん mailto:sage [05/02/09 15:02:15 ] dllゆーな。
60 名前:デフォルトの名無しさん mailto:sage [05/02/09 20:21:36 ] dllって言う奴はWin上がり
61 名前:デフォルトの名無しさん mailto:sage [05/02/09 21:54:41 ] UNIXerはなんて言うの?
62 名前:デフォルトの名無しさん mailto:sage [05/02/09 21:56:50 ] そ。
63 名前:デフォルトの名無しさん mailto:sage [05/02/09 21:58:00 ] さ。
64 名前:デフォルトの名無しさん mailto:sage [05/02/09 22:37:10 ] どるる。
65 名前:デフォルトの名無しさん mailto:sage [05/02/09 23:39:12 ] どるるゆーな。
66 名前:デフォルトの名無しさん [05/02/10 00:03:50 ] >>56 やっぱ無理ですか。どうもでした。 ちなみにdllってWin用語ですか!?たまたま拡張子がDLLなだけでしょ。
67 名前:デフォルトの名無しさん mailto:sage [05/02/10 00:15:11 ] そ。
68 名前:デフォルトの名無しさん mailto:sage [05/02/10 00:28:17 ] >>66 なこといっても、dymamic loadable libararyとは言わないもん。 shared libraryだな。
69 名前:デフォルトの名無しさん mailto:sage [05/02/10 00:35:06 ] 同じというならWindowsのDLL作るのってなんであんなに面倒くさいかね。
70 名前:デフォルトの名無しさん mailto:sage [05/02/10 00:38:03 ] 誰が同じって言ったんだろう
71 名前:デフォルトの名無しさん mailto:sage [05/02/10 00:55:21 ] どるるワラタ >>68 確か dynamic link library の略だったような。 なぜか soopen() じゃなくて dlopen() だなあ。
72 名前:デフォルトの名無しさん mailto:sage [05/02/10 14:18:26 ] >>71 shareされるかどうかの観点 -> so dynamicにロードされるかどうかの観点 -> dl(l)
73 名前:デフォルトの名無しさん [05/02/10 17:04:50 ] >>72 惜しい
74 名前:デフォルトの名無しさん mailto:sage [05/02/10 17:12:06 ] >>49 W=リチャード(故)の「UNIXネットワークプログラミング」8000円に XTIのページが100ページぐらいあって 泣きたくなった まじでいらん。金その分返せと
75 名前:デフォルトの名無しさん mailto:sage [05/02/10 17:34:03 ] >>71 dlopenはもともと別のAPIですから。
76 名前:デフォルトの名無しさん [05/02/11 21:26:59 ] perrorを呼んだ後はerrnoの値って変わっちゃうの? printfは何度呼んでも変わらないようだけど。 int main(void) { errno = ETIMEDOUT; printf("errno: %d \n", errno); perror("perror"); printf("errno: %d \n", errno); return 0; } errno: 2 perror: No such file or directory errno: 29
77 名前:デフォルトの名無しさん mailto:sage [05/02/11 21:33:20 ] そういうもんです
78 名前:デフォルトの名無しさん [05/02/11 23:16:43 ] FreeBSDでは変わらんけど。 29ってなんだ?
79 名前:デフォルトの名無しさん mailto:sage [05/02/11 23:56:23 ] 変らないのはたまたま。 後で利用したければ、保存しなさい。
80 名前:デフォルトの名無しさん mailto:sage [05/02/12 00:11:46 ] >>76 perrorが標準エラーに出力するってことは、最終的にwrite(2)が 呼ばれるわけだから、どのみちerrnoが上書きされる可能性がある。 もし、errnoを保存してたとすると、write(2)が失敗した場合のerrnoを 取得できなくなってしまう(可能性も必要性も低いけど)。 こう考えれば納得できるんじゃないかな?
81 名前:76 mailto:sage [05/02/12 00:38:18 ] >>80 なるほどわかりますた… あと>>76 のETIMEDOUT→ENOENTですた、スマソ まぁ何でもいいんですが。
82 名前:デフォルトの名無しさん [05/02/12 21:15:07 ] >>51 popen()はスレッドセーフだよな?何故使ったらダメなんだ?
83 名前:デフォルトの名無しさん [05/02/12 21:25:23 ] pthreadの動作を実際に見せてやれ。 おまいはできる部下だ
84 名前:デフォルトの名無しさん [05/02/12 21:27:20 ] >74 本買う前に目録ぐらい見なよ
85 名前:デフォルトの名無しさん [05/02/12 22:31:57 ] >>84 ビニールの帯でくくってあってさぁ・・・
86 名前:デフォルトの名無しさん mailto:sage [05/02/12 22:34:47 ] >85 何のために常時接続してんだか…
87 名前:デフォルトの名無しさん [05/02/17 02:45:26 ] コマンドを実行してそれを返り値にして渡したいのですが どのような方法があるでしょうか? 具体的には ls -1 *.jpg の結果が欲しいのです すいませんがよろしくおねがいします
88 名前:デフォルトの名無しさん [05/02/17 02:52:40 ] 「返り値にして渡したい」の意味が正確には把握できませんが、 return system("ls -1 *.jpg"); ってことですか? それとも、 FILE *f = popen("ls -1 *.jpg", "r"); // fから読む ってことでしょうか?
89 名前:デフォルトの名無しさん mailto:sage [05/02/17 04:16:35 ] 呼び側で、引数それぞれにつき、BUFSIZぶん確保。 返り値は、エラーの有無。 おもしろかった。 int hoge(char *cmd, char *b) { FILE *fp; int ret; cmd[strlen(cmd) - 1] = '\0'; /* 改行がくっついてる、と、仮定 */ printf("cmd: %s\n", cmd); if ((fp = (popen(cmd, "r"))) == NULL) { perror("popen"); return (1); } if ((ret = fread(b, 1, BUFSIZ, fp)) < 1) { printf("no output from \"%s\"\n", cmd); } else if (ret < 0) { perror("fread"); pclose(fp); return (1); } pclose(fp); return (0); }
90 名前:デフォルトの名無しさん mailto:sage [05/02/17 04:42:42 ] ??ちょとまずかった?? if ((ret = (fread(b, 1, BUFSIZ, fp))) < 1) { fprintf(stderr, "no output from \"%s\"\n", cmd); if (ferror(fp)) { perror("fread"); pclose(fp); return (1); } } ...すみません。もうやめます。
91 名前:デフォルトの名無しさん mailto:sage [05/02/17 06:11:03 ] どうしてUNIX厨のソースはこんな醜いんだろう
92 名前:デフォルトの名無しさん [05/02/17 07:40:22 ] それがUNIXクオリティ
93 名前:デフォルトの名無しさん [05/02/17 12:54:54 ] >>91 それは厨だからさ。
94 名前:デフォルトの名無しさん mailto:sage [05/02/17 13:22:01 ] >>91 お前のレベルが低いだけだろ
95 名前:デフォルトの名無しさん [05/02/17 13:56:20 ] すみません。よろしければ教えてください。 mailxでメールを送信する際に 添付ファイルをつけて送信することは可能なのでしょうか? どこぞやにUNIXじゃ添付できないって書いてあったんですけれども もしできそうならおしえていただけますでしょうか?
96 名前:デフォルトの名無しさん mailto:sage [05/02/17 13:57:04 ] 帰れ
97 名前:デフォルトの名無しさん [05/02/17 13:58:42 ] >>95 板違い
98 名前:デフォルトの名無しさん mailto:sage [05/02/17 13:59:16 ] あらら、答えられないなら黙ってればいいのにw UNIX厨っていつも余計な事するよね
99 名前:95 [05/02/17 14:04:38 ] もうしわけないです、どこの質問すればいいですか? 誘導願いしますw UNIXの環境上からmailxで添付ファイルの送り方 があればききたいのですけれども
100 名前:デフォルトの名無しさん mailto:sage [05/02/17 14:05:32 ] なんでマニュアル読まないの?