Pengenalan
- 3294
- 757
- Wendell Shields
Dengan bahagian perkembangan C kami di artikel Linux, kami bersiap -siap untuk keluar dari zon teoritis dan memasuki kehidupan sebenar. Jika anda mengikuti siri ini sehingga titik ini dan cuba menyelesaikan semua latihan, anda kini akan mempunyai beberapa idea tentang apa yang C, jadi anda perlu keluar di alam liar dan melakukan beberapa perkara praktikal, tanpa teori yang tidak ada banyak nilai. Beberapa konsep yang anda lihat di bawah sudah diketahui, tetapi mereka sangat penting untuk mana-mana program C pada mana-mana OS seperti UNIX. Ya, maklumat itu sah tanpa mengira OS, selagi ia semacam unix, tetapi jika anda akan tersandung pada sesuatu yang khusus, anda akan tahu. Kami akan merawat konsep seperti input standard, output dan ralat, printf () dan akses fail yang mendalam, antara lain.
Asas I/O
Sebelum kita melangkah lebih jauh, mari luangkan masa dan lihat apa ini I/O. Seperti yang banyak anda ketahui, istilah ini bermaksud input/output dan mempunyai makna yang luas, tetapi dalam kes kami, kami berminat dengan cara mencetak mesej ke konsol dan bagaimana untuk mendapatkan input dari pengguna, ditambah topik yang lebih maju dalam hal yang sama urat. Perpustakaan C Standard mentakrifkan satu siri fungsi untuk ini, seperti yang anda lihat, dan selepas membaca sedikit, anda akan mendapati bahawa anda akan merasa sukar untuk hidup tanpa, melainkan jika anda ingin menulis semula fungsi untuk bersenang-senang. Lebih baik menjadi jelas dari awal bahawa kemudahan yang dibincangkan oleh material ini bukan sebahagian daripada bahasa C per se; Seperti yang saya katakan, Perpustakaan C Standard menawarkannya.
Standard I/O
Ringkas. Pada masa kini, sumber input utama, sekurang -kurangnya pada tahap ini, adalah papan kekunci, dan peranti yang dicetak sistem adalah skrin, tetapi perkara -perkara tidak selalu seperti ini. Input dibuat pada teletypes (dengan cara, nama peranti Tty berasal dari itu), dan prosesnya lambat dan kikuk. Mana-mana sistem seperti Unix masih mempunyai beberapa sisa sejarah mengenai, tetapi bukan sahaja, I/O, tetapi untuk seluruh artikel ini kita akan merawat stdin sebagai papan kekunci dan stdout/stderr sebagai skrin. Anda tahu bahawa anda boleh mengarahkan ke fail, dengan menggunakan operator '>' yang ditawarkan oleh shell anda, tetapi kami tidak berminat dengan itu buat masa ini. Sebelum kita memulakan artikel akhirnya, peringatan sedikit: Mac OS hingga Versi 9 mempunyai beberapa ciri unik mengenai subjek kami yang mendorong saya membaca beberapa dokumentasi sebelum memulakan pembangunan di atasnya. Contohnya, pada semua sistem UNIX (seperti) kunci masukkan LF (suapan talian). Di tingkap itu cr/lf, dan pada epal sehingga Mac os 9 itu cr. Singkatnya, setiap vendor unix komersial cuba menjadikan OSS mereka "unik" dengan menambahkan ciri. Bercakap tentang dokumentasi, halaman manual sistem anda akan terbukti tidak ternilai, walaupun mungkin gersang pada masa -masa, dan juga buku yang bagus mengenai reka bentuk unix akan kelihatan baik di pihak anda.
Kami telah melihat printf () dalam ansuran sebelumnya dan cara mencetak teks di skrin. Kami juga melihat scanf () sebagai cara untuk mendapatkan teks dari pengguna. Untuk watak tunggal, anda boleh bergantung pada getchar () dan putchar (). Kami akan melihat sekarang beberapa fungsi berguna dari tajuk yang termasuk dalam perpustakaan standard. Tajuk pertama yang akan kita bicarakan adalah ctype.h
, dan ia mengandungi fungsi yang berguna untuk memeriksa kes watak atau mengubahnya. Ingat bahawa setiap tajuk standard mempunyai halaman manual, menjelaskan fungsi apa yang tersedia, dan fungsi tersebut pada gilirannya mempunyai halaman manusia, memperincikan jenis pulangan, argumen dan sebagainya. Inilah contoh yang menukarkan setiap watak dalam rentetan ke huruf kecil, menggunakan Tolower (). Bagaimana anda mencapai sebaliknya?
#include #include int main () int c; /* Watak dibaca*/ manakala ((c = getChar ()) != Eof) putchar (Tolower (c)); kembali 0;
Soalan lain untuk anda adalah: dengan cara bagaimana kod itu diubah suai supaya ia mencetak hasil yang lebih rendah hanya selepas ayat? Iaitu, dengan syarat hukuman itu selalu berakhir dengan titik dan ruang.
printf () secara terperinci
Oleh kerana itu fungsi yang digunakan secara meluas, saya hanya merasakan bahawa ia layak mendapat subseksinya sendiri. printf () menerima argumen yang diawali dengan simbol '%' dan diikuti dengan surat (atau lebih), dengan itu mengatakan apa jenis input yang harus diharapkan. Kami telah bekerja sebelum ini dengan '%d', yang bermaksud perpuluhan, yang sesuai ketika bekerja dengan bilangan bulat. Berikut adalah senarai format printf () yang lebih lengkap:
- D, I - Integer
- o - oktal, tanpa prefixing sifar
- x, x - hexadecimal, tanpa awalan 0x
- u - int unsigned
- c - char
- s - String, char *
- F, E, E, G, G, - Float - Periksa manual printf () sistem anda
- p - penunjuk, tidak sah *, bergantung kepada pelaksanaan, standard antara distros linux
Saya sangat mengesyorkan anda meluangkan masa untuk bermain dengan penentu ini, dan hakikat bahawa saya tidak mendapat lebih terperinci seperti Precision adalah kerana anda perlu melakukan bacaan untuk diri anda sendiri. Semasa anda berada di sana, beri perhatian khusus kepada bahagian senarai argumen yang berubah-ubah, dan ambil perhatian bahawa Linux mempunyai arahan bernama Printf, sebagai sebahagian daripada teras, jadi pastikan anda menggunakan Seksyen 3 Manpage (Linux-Specific, sebagai unices lain mungkin mempunyai bahagian manual yang dibentangkan secara berbeza).
scanf () adalah bertentangan dengan printf, kerana ia memerlukan input dari pengguna dan bukannya mengeluarkan kepada pengguna. Pengesahan format hampir sama, dengan pengecualian tertentu mengenai terapung dan fakta bahawa ia tidak mempunyai %p. Mengapa anda fikir begitu? Ia juga menyokong senarai argumen yang berubah -ubah, seperti printf ().
Akses fail
Ini adalah satu lagi bahagian penting dari I/O dan sejak C adalah tahap yang agak rendah, ia membolehkan anda membaca dan menulis fail ke cakera dengan cara yang mudah. Tajuk yang menawarkan fungsi mudah ini adalah stdio.h
, dan fungsi yang akan anda gunakan adalah fopen (). Ia mengambil nama fail sebagai hujah, serta mod ia harus dibaca (baca/tulis (r, w). tambah (a) atau binari (b), berbanding dengan teks - tetapi pelaksanaannya bergantung kepada sistem). fopen () mengembalikan penunjuk fail, yang merupakan jenis. Sebelum apa -apa, anda memerlukan penunjuk fail, seperti yang digambarkan:
Fail *fp; / *penunjuk fail */ fp = fopen ("/home/user/testFile.txt "," w "); fprintf (fp," fail ujian saya.")
Sederhana: Saya membuka fail pada cakera saya dan menulis kepadanya rentetan "Fail Ujian Saya". Anda mungkin dapat meneka, saya mempunyai beberapa latihan. Adakah ia akan membuat perbezaan jika fail itu wujud atau tidak? Bagaimana jika ia wujud, tetapi kosong? Sekiranya saya menggunakan tambahan dan bukannya mod tulis? Kenapa?
Setelah menggunakan fail, seseorang mesti tutupkan ia. Ini penting, kerana dengan menutup program anda memberitahu sistem operasi "Hei, saya selesai dengan fail ini. Tutup semua penampan kotor dan tulis fail saya ke cakera dengan cara yang bertamadun, jadi tiada kehilangan data berlaku ".
fclose (fp);
Berikut adalah contoh kehidupan sebenar menggunakan fail I/O dari program Yest Kimball Hawkins, yang membantu kita mengingati dua perkara: satu, kerana reka bentuk Unix (semuanya adalah fail), stdin, stdout dan stderr adalah fail, jadi mereka boleh digunakan dengan fungsi fail I/O, dan dua, bahawa bahagian seterusnya merawat stderr dan keluar.
void store_time () jika (time_ok == palsu) kembali; / * Tiada maklumat masa, langkau */ /* Jam */ jika (tfield [0]> 24) fprintf (stderr, "ralat: jam input yang buruk: '%d' \ n", tfield [0]); Keluar (1); thetime-> tm_hour = tfield [0]; / * Minit */ jika (tfield [1]> 0) jika (tfield [1]> 60) fprintf (stderr, "ralat: minit input buruk: '%d' \ n", tfield [1]); Keluar (1); thetime-> tm_min = tfield [1];
Merawat kesilapan dengan stderr dan keluar
Program anda mesti mempunyai cara untuk menangani kesilapan dan biarkan OS dan pengguna mengetahui sesuatu yang salah. Walaupun bahagian ini sama sekali tidak disertasi tentang cara merawat situasi anda yang mungkin di C, ia berkaitan dengan unsur Unix yang sangat berguna dan baik: kesilapan output ke tempat lain, berbeza daripada stdin, supaya pengguna dapat memisahkan dua ketika menyahpepijat masalah. Juga, gunakan kod keluar supaya pengguna tahu bila program selesai dengan jayanya dan ketika tidak. Inilah sebabnya mengapa Stderr wujud, untuk bahagian pertama, dan inilah sebabnya keluar () juga wujud, untuk bahagian kedua. Pembaca yang bijak sudah mendapat idea dari sampel kod di atas, jadi semua yang diperlukan adalah memberitahu sistem untuk tidak mengeluarkan teks pada output lalai/standard, tetapi kepada "saluran" khas yang wujud terutama untuk ini. Mengenai Keluar (), ia berfungsi seperti ini: Zero untuk Kejayaan, sebarang nilai lain antara 1 dan 255 sekiranya berlaku kegagalan. Ia termasuk dalam stdlib.h
dan tidak mengembalikan nilai. Terpulang kepada anda, seperti yang anda lihat dalam kod Kimball di atas, untuk memberitahu keluar jika ada masalah, jadi ia dapat memaklumkan fungsi induk mengenai status keluar.
Tajuk berguna
Tidak perlu dikatakan, mengetahui perpustakaan C standard adalah wajib jika anda ingin serius dengan pembangunan C di Linux. Oleh itu, inilah beberapa tajuk lain yang menawarkan kemudahan yang berkaitan dengan I/O dan banyak lagi:
tali.h
Header ini akan membuktikan sangat membantu apabila bekerja dengan penukaran rentetan (strto*()), membandingkan rentetan (strcmp ()) atau memeriksa panjang rentetan (strlen ()).
ctype.h
Selain penukaran kes, ctype.h
Menawarkan fungsi yang memeriksa pelbagai sifat watak. Sebahagian daripada mereka adalah Isalnum (), Isupper (), Isalpha () atau Isspace (), dan anda dijemput untuk meneka apa yang mereka lakukan dan bagaimana mereka bekerja.
matematik.h
Banyak fungsi yang diperlukan untuk lebih daripada empat operasi aritmetik asas boleh didapati di sini, termasuk dosa (), cos () atau exp ().
Bacaan lanjut
Pembaca yang lebih berpengalaman akan menjatuhkan saya ke salib kerana tidak merawat subjek yang lebih maju seperti malloc () atau size_t. Seperti yang saya berulang kali berkata, siri ini tidak dimaksudkan sebagai buku dalam talian yang tahu untuk pembangunan C (tidak ada perkara seperti itu), melainkan titik permulaan yang baik untuk pemula. Saya merasakan bahawa pemaju C masa depan mestilah berpengalaman dalam petunjuk dan bagaimana peruntukan memori berfungsi sebelum dia mula mengalami mimpi buruk malloc (). Selepas berakhirnya siri ini, anda disyorkan untuk mendapatkan buku yang mendalam mengenai C, setelah meminta beberapa pendapat dari yang lama (bukan H.P. Lovecraft yang lama, saya harap), jadi anda mengelakkan maklumat palsu atau mengelirukan. Walaupun anda akan tahu tentang percuma () dan malloc () sehingga kami selesai, mungkin lebih baik untuk mendapatkan buku bercetak dan tidur dengannya di bawah bantal anda.
Kesimpulan
Artikel yang akan mengikuti yang ini akan menjadi lebih lama lagi, kerana kita akan menyelidiki lebih jauh ke dalam cara pengaturcaraan C UNIX, tetapi pemahaman yang baik tentang apa yang dikatakan di sini adalah disyorkan untuk langkah -langkah seterusnya untuk menjadi lancar mungkin.
- I. C Pembangunan di Linux - Pengenalan
- Ii. Perbandingan antara c dan bahasa pengaturcaraan lain
- Iii. Jenis, pengendali, pembolehubah
- Iv. Kawalan aliran
- V. Fungsi
- Vi. Petunjuk dan tatasusunan
- VII. Struktur
- Viii. Asas I/O
- Ix. Gaya dan cadangan pengekodan
- X. Membina program
- Xi. Pembungkusan untuk Debian dan Fedora
- Xii. Mendapatkan pakej di repositori debian rasmi
Tutorial Linux Berkaitan:
- Perkara yang hendak dipasang di Ubuntu 20.04
- Pengenalan kepada Automasi, Alat dan Teknik Linux
- Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
- Cara menentukan zon firewalld tersuai
- Mint 20: Lebih baik daripada Ubuntu dan Microsoft Windows?
- Menguasai Gelung Skrip Bash
- Muat turun linux
- Perkara yang perlu dilakukan setelah memasang Ubuntu 22.04 Jur -ubur Jammy ..
- Ubuntu 20.04 Panduan
- Pasang Arch Linux di Workstation VMware