⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tty_ioctl.c

📁 linux字符驱动源码
💻 C
📖 第 1 页 / 共 4 页
字号:
<a name=L201 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L201">201</a>         tmp = (char *) &amp;tty-&gt;<a href="ident?v=0.97;i=winsize">winsize</a>;<a name=L202 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L202">202</a>         changed = 0;<a name=L203 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L203">203</a>         for (i = 0; i &lt; sizeof (*ws) ; i++,tmp++) {<a name=L204 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L204">204</a>                 c = <a href="ident?v=0.97;i=get_fs_byte">get_fs_byte</a>(i + (char *) ws);<a name=L205 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L205">205</a>                 if (c == *tmp)<a name=L206 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L206">206</a>                         continue;<a name=L207 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L207">207</a>                 changed = 1;<a name=L208 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L208">208</a>                 *tmp = c;<a name=L209 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L209">209</a>         }<a name=L210 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L210">210</a>         if (changed)<a name=L211 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L211">211</a>                 <a href="ident?v=0.97;i=kill_pg">kill_pg</a>(tty-&gt;pgrp, <a href="ident?v=0.97;i=SIGWINCH">SIGWINCH</a>, 1);<a name=L212 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L212">212</a>         return 0;<a name=L213 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L213">213</a> }<a name=L214 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L214">214</a> <a name=L215 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L215">215</a> static int <a href="ident?v=0.97;i=get_window_size">get_window_size</a>(struct <a href="ident?v=0.97;i=tty_struct">tty_struct</a> * tty, struct <a href="ident?v=0.97;i=winsize">winsize</a> * ws)<a name=L216 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L216">216</a> {<a name=L217 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L217">217</a>         int i;<a name=L218 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L218">218</a>         char * tmp;<a name=L219 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L219">219</a> <a name=L220 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L220">220</a>         if (!ws)<a name=L221 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L221">221</a>                 return -<a href="ident?v=0.97;i=EINVAL">EINVAL</a>;<a name=L222 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L222">222</a>         <a href="ident?v=0.97;i=verify_area">verify_area</a>(ws, sizeof (*ws));<a name=L223 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L223">223</a>         tmp = (char *) ws;<a name=L224 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L224">224</a>         for (i = 0; i &lt; sizeof (struct <a href="ident?v=0.97;i=winsize">winsize</a>) ; i++,tmp++)<a name=L225 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L225">225</a>                 <a href="ident?v=0.97;i=put_fs_byte">put_fs_byte</a>(((char *) &amp;tty-&gt;<a href="ident?v=0.97;i=winsize">winsize</a>)[i], tmp);<a name=L226 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L226">226</a>         return 0;<a name=L227 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L227">227</a> }<a name=L228 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L228">228</a> <a name=L229 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L229">229</a> int <a href="ident?v=0.97;i=tty_ioctl">tty_ioctl</a>(struct <a href="ident?v=0.97;i=inode">inode</a> * <a href="ident?v=0.97;i=inode">inode</a>, struct <a href="ident?v=0.97;i=file">file</a> * <a href="ident?v=0.97;i=file">file</a>,<a name=L230 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L230">230</a>         unsigned int cmd, unsigned int arg)<a name=L231 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L231">231</a> {<a name=L232 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L232">232</a>         struct <a href="ident?v=0.97;i=tty_struct">tty_struct</a> * tty;<a name=L233 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L233">233</a>         struct <a href="ident?v=0.97;i=tty_struct">tty_struct</a> * other_tty;<a name=L234 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L234">234</a>         int pgrp;<a name=L235 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L235">235</a>         int dev;<a name=L236 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L236">236</a> <a name=L237 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L237">237</a>         if (<a href="ident?v=0.97;i=MAJOR">MAJOR</a>(<a href="ident?v=0.97;i=file">file</a>-&gt;f_rdev) != 4) {<a name=L238 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L238">238</a>                 <a href="ident?v=0.97;i=printk">printk</a>(<i>"tty_ioctl: tty pseudo-major != 4\n"</i>);<a name=L239 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L239">239</a>                 return -<a href="ident?v=0.97;i=EINVAL">EINVAL</a>;<a name=L240 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L240">240</a>         }<a name=L241 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L241">241</a>         dev = <a href="ident?v=0.97;i=MINOR">MINOR</a>(<a href="ident?v=0.97;i=file">file</a>-&gt;f_rdev);<a name=L242 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L242">242</a>         tty = <a href="ident?v=0.97;i=tty_table">tty_table</a> + (dev ? ((dev &lt; 64)? dev-1:dev) : <a href="ident?v=0.97;i=fg_console">fg_console</a>);<a name=L243 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L243">243</a> <a name=L244 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L244">244</a>         if (<a href="ident?v=0.97;i=IS_A_PTY">IS_A_PTY</a>(dev))<a name=L245 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L245">245</a>                 other_tty = <a href="ident?v=0.97;i=tty_table">tty_table</a> + <a href="ident?v=0.97;i=PTY_OTHER">PTY_OTHER</a>(dev);<a name=L246 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L246">246</a>         else<a name=L247 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L247">247</a>                 other_tty = <a href="ident?v=0.97;i=NULL">NULL</a>;<a name=L248 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L248">248</a>                 <a name=L249 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L249">249</a>         if (!(tty-&gt;write_q &amp;&amp; tty-&gt;read_q &amp;&amp; tty-&gt;secondary &amp;&amp; tty-&gt;write))<a name=L250 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L250">250</a>                 return -<a href="ident?v=0.97;i=EINVAL">EINVAL</a>;<a name=L251 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L251">251</a>         switch (cmd) {<a name=L252 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L252">252</a>                 case <a href="ident?v=0.97;i=TCGETS">TCGETS</a>:<a name=L253 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L253">253</a>                         return <a href="ident?v=0.97;i=get_termios">get_termios</a>(tty,(struct <a href="ident?v=0.97;i=termios">termios</a> *) arg);<a name=L254 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L254">254</a>                 case <a href="ident?v=0.97;i=TCSETSF">TCSETSF</a>:<a name=L255 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L255">255</a>                         <a href="ident?v=0.97;i=flush_input">flush_input</a>(tty);<a name=L256 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L256">256</a>                 <b><i>/* fallthrough */</i></b><a name=L257 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L257">257</a>                 case <a href="ident?v=0.97;i=TCSETSW">TCSETSW</a>:<a name=L258 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L258">258</a>                         <a href="ident?v=0.97;i=wait_until_sent">wait_until_sent</a>(tty);<a name=L259 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L259">259</a>                 <b><i>/* fallthrough */</i></b><a name=L260 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L260">260</a>                 case <a href="ident?v=0.97;i=TCSETS">TCSETS</a>:<a name=L261 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L261">261</a>                         return <a href="ident?v=0.97;i=set_termios">set_termios</a>(tty,(struct <a href="ident?v=0.97;i=termios">termios</a> *) arg, dev);<a name=L262 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L262">262</a>                 case <a href="ident?v=0.97;i=TCGETA">TCGETA</a>:<a name=L263 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L263">263</a>                         return <a href="ident?v=0.97;i=get_termio">get_termio</a>(tty,(struct <a href="ident?v=0.97;i=termio">termio</a> *) arg);<a name=L264 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L264">264</a>                 case <a href="ident?v=0.97;i=TCSETAF">TCSETAF</a>:<a name=L265 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L265">265</a>                         <a href="ident?v=0.97;i=flush_input">flush_input</a>(tty);<a name=L266 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L266">266</a>                 <b><i>/* fallthrough */</i></b><a name=L267 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L267">267</a>                 case <a href="ident?v=0.97;i=TCSETAW">TCSETAW</a>:<a name=L268 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L268">268</a>                         <a href="ident?v=0.97;i=wait_until_sent">wait_until_sent</a>(tty); <b><i>/* fallthrough */</i></b><a name=L269 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L269">269</a>                 case <a href="ident?v=0.97;i=TCSETA">TCSETA</a>:<a name=L270 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L270">270</a>                         return <a href="ident?v=0.97;i=set_termio">set_termio</a>(tty,(struct <a href="ident?v=0.97;i=termio">termio</a> *) arg, dev);<a name=L271 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L271">271</a>                 case <a href="ident?v=0.97;i=TCSBRK">TCSBRK</a>:<a name=L272 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L272">272</a>                         if (!<a href="ident?v=0.97;i=IS_A_SERIAL">IS_A_SERIAL</a>(dev))<a name=L273 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L273">273</a>                                 return -<a href="ident?v=0.97;i=EINVAL">EINVAL</a>;<a name=L274 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L274">274</a>                         <a href="ident?v=0.97;i=wait_until_sent">wait_until_sent</a>(tty);<a name=L275 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L275">275</a>                         if (!arg)<a name=L276 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L276">276</a>                                 <a href="ident?v=0.97;i=send_break">send_break</a>(dev-64);<a name=L277 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L277">277</a>                         return 0;<a name=L278 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L278">278</a>                 case <a href="ident?v=0.97;i=TCXONC">TCXONC</a>:<a name=L279 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L279">279</a>                         switch (arg) {<a name=L280 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L280">280</a>                         case <a href="ident?v=0.97;i=TCOOFF">TCOOFF</a>:<a name=L281 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L281">281</a>                                 tty-&gt;stopped = 1;<a name=L282 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L282">282</a>                                 <a href="ident?v=0.97;i=TTY_WRITE_FLUSH">TTY_WRITE_FLUSH</a>(tty);<a name=L283 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L283">283</a>                                 return 0;<a name=L284 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L284">284</a>                         case <a href="ident?v=0.97;i=TCOON">TCOON</a>:<a name=L285 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L285">285</a>                                 tty-&gt;stopped = 0;<a name=L286 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L286">286</a>                                 <a href="ident?v=0.97;i=TTY_WRITE_FLUSH">TTY_WRITE_FLUSH</a>(tty);<a name=L287 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L287">287</a>                                 return 0;<a name=L288 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L288">288</a>                         case <a href="ident?v=0.97;i=TCIOFF">TCIOFF</a>:<a name=L289 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L289">289</a>                                 if (<a href="ident?v=0.97;i=STOP_CHAR">STOP_CHAR</a>(tty))<a name=L290 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L290">290</a>                                         <a href="ident?v=0.97;i=put_tty_queue">put_tty_queue</a>(<a href="ident?v=0.97;i=STOP_CHAR">STOP_CHAR</a>(tty),tty-&gt;write_q);<a name=L291 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L291">291</a>                                 return 0;<a name=L292 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L292">292</a>                         case <a href="ident?v=0.97;i=TCION">TCION</a>:<a name=L293 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L293">293</a>                                 if (<a href="ident?v=0.97;i=START_CHAR">START_CHAR</a>(tty))<a name=L294 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L294">294</a>                                         <a href="ident?v=0.97;i=put_tty_queue">put_tty_queue</a>(<a href="ident?v=0.97;i=START_CHAR">START_CHAR</a>(tty),tty-&gt;write_q);<a name=L295 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L295">295</a>                                 return 0;<a name=L296 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L296">296</a>                         }<a name=L297 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L297">297</a>                         return -<a href="ident?v=0.97;i=EINVAL">EINVAL</a>; <b><i>/* not implemented */</i></b><a name=L298 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L298">298</a>                 case <a href="ident?v=0.97;i=TCFLSH">TCFLSH</a>:<a name=L299 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L299">299</a>                         if (arg==0)<a name=L300 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L300">300</a>                                 <a href="ident?v=0.97;i=flush_input">flush_input</a>(tty);<a name=L301 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L301">301</a>                         else if (arg==1)<a name=L302 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L302">302</a>                                 <a href="ident?v=0.97;i=flush_output">flush_output</a>(tty);<a name=L303 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L303">303</a>                         else if (arg==2) {<a name=L304 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L304">304</a>                                 <a href="ident?v=0.97;i=flush_input">flush_input</a>(tty);<a name=L305 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L305">305</a>                                 <a href="ident?v=0.97;i=flush_output">flush_output</a>(tty);<a name=L306 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L306">306</a>                         } else<a name=L307 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L307">307</a>                                 return -<a href="ident?v=0.97;i=EINVAL">EINVAL</a>;<a name=L308 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L308">308</a>                         return 0;<a name=L309 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L309">309</a>                 case <a href="ident?v=0.97;i=TIOCEXCL">TIOCEXCL</a>:<a name=L310 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L310">310</a>                         return -<a href="ident?v=0.97;i=EINVAL">EINVAL</a>; <b><i>/* not implemented */</i></b><a name=L311 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L311">311</a>                 case <a href="ident?v=0.97;i=TIOCNXCL">TIOCNXCL</a>:<a name=L312 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L312">312</a>                         return -<a href="ident?v=0.97;i=EINVAL">EINVAL</a>; <b><i>/* not implemented */</i></b><a name=L313 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L313">313</a>                 case <a href="ident?v=0.97;i=TIOCSCTTY">TIOCSCTTY</a>:<a name=L314 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L314">314</a>                         return -<a href="ident?v=0.97;i=EINVAL">EINVAL</a>; <b><i>/* set controlling term NI */</i></b><a name=L315 href="source/kernel/chr_drv/tty_ioctl.c?v=0.97#L315">315</a>                 case <a href="ident?v=0.97;i=TIOCGPGRP">TIOCGPGRP</a>:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -