Perkenalan

Perkenalan

Dengan bagian dari pengembangan C kami di artikel Linux kami bersiap -siap untuk keluar dari zona teoretis dan memasuki kehidupan nyata. Jika Anda mengikuti seri sampai saat ini dan mencoba menyelesaikan semua latihan, Anda sekarang akan memiliki beberapa ide tentang apa C, jadi Anda harus keluar di alam liar dan melakukan beberapa hal praktis, tanpa teori mana yang tidak dimiliki banyak nilai. Beberapa konsep yang akan Anda lihat di bawah ini sudah diketahui, tetapi mereka sangat penting untuk setiap program C pada os seperti unix. Ya, informasinya valid terlepas dari OS, selama itu semacam Unix, tetapi jika Anda akan tersandung pada sesuatu yang spesifik Linux, Anda akan tahu. Kami akan memperlakukan konsep seperti input standar, output dan kesalahan, printf mendalam () dan akses file, antara lain.

I/O Dasar

Sebelum kita melangkah lebih jauh, mari kita luangkan waktu dan lihat tentang apa I/O ini tentang. Seperti yang Anda ketahui, istilah ini adalah singkatan dari input/output dan memiliki makna yang luas, tetapi dalam kasus kami kami tertarik pada cara mencetak pesan ke konsol dan cara mendapatkan input dari pengguna, ditambah topik yang lebih canggih dalam hal yang sama pembuluh darah. Perpustakaan C standar mendefinisikan serangkaian fungsi untuk ini, seperti yang akan Anda lihat, dan setelah membaca sedikit, Anda akan melihat bahwa Anda akan merasa cukup sulit untuk hidup tanpa, kecuali jika Anda ingin menulis ulang fungsi untuk bersenang-senang. Lebih baik sejak awal bahwa fasilitas yang dibicarakan materi ini bukan bagian dari bahasa C sendiri; Seperti yang saya katakan, perpustakaan C standar menawarkannya.

Standar I/O

Singkatnya, subtitle di atas berarti "Dapatkan input dari pengguna, cetak karakter pada output standar dan cetak kesalahan pada kesalahan standar". Saat ini, sumber input utama, setidaknya pada level ini, adalah keyboard, dan perangkat yang dicetak oleh sistem adalah layar, tetapi hal -hal tidak selalu seperti ini. Input dibuat pada teletipe (omong -omong, nama perangkat Tty berasal dari itu), dan prosesnya lambat dan kikuk. Sistem seperti unix masih memiliki beberapa sisa historis mengenai, tetapi tidak hanya, I/O, tetapi untuk sisa artikel ini kami akan memperlakukan Stdin sebagai keyboard dan stdout/stderr sebagai layar. Anda tahu bahwa Anda dapat mengarahkan kembali ke file, dengan menggunakan operator '>' yang ditawarkan oleh shell Anda, tetapi kami tidak tertarik untuk saat ini. Sebelum kita memulai artikel akhirnya, sedikit pengingat: Mac OS hingga versi 9 memiliki beberapa fitur unik mengenai subjek kami yang mendorong saya untuk membaca beberapa dokumentasi sebelum memulai pengembangan di atasnya. Misalnya, pada semua sistem UNIX (seperti), kunci Enter menghasilkan LF (line feed). Di Windows itu CR/LF, dan di Apple hingga Mac OS 9 CR. Singkatnya, setiap vendor unix komersial mencoba membuat OS mereka "unik" dengan menambahkan fitur. Berbicara tentang dokumentasi, halaman manual sistem Anda akan terbukti sangat berharga, meskipun mungkin kadang -kadang kering, dan juga buku yang bagus tentang desain unix akan terlihat bagus di sisi Anda.

Kami telah melihat printf () dalam angsuran kami sebelumnya dan cara mencetak teks di layar. Kami juga telah melihat scanf () sebagai sarana untuk mendapatkan teks dari pengguna. Untuk satu karakter, Anda dapat mengandalkan getChar () dan putchar (). Sekarang kita akan melihat beberapa fungsi yang berguna dari header yang termasuk dalam perpustakaan standar. Header pertama yang akan kita bicarakan ctype.H, dan berisi fungsi yang berguna untuk memeriksa kasus karakter atau mengubahnya. Ingatlah bahwa setiap header standar memiliki halaman manual, menjelaskan fungsi apa yang tersedia, dan fungsi tersebut pada gilirannya memiliki halaman manusia, merinci jenis pengembalian, argumen dan sebagainya. Berikut adalah contoh yang mengubah setiap karakter dalam string ke huruf kecil, menggunakan tolower (). Bagaimana Anda bisa mencapai yang sebaliknya?

#include #include int main () int c; /* Karakter dibaca*/ ketika ((c = getChar ()) != Eof) putchar (tolower (c)); kembali 0;  

Pertanyaan lain untuk Anda adalah: dengan cara apa kode harus dimodifikasi sehingga mencetak hasil yang lebih rendah hanya setelah kalimat? Yaitu, asalkan kalimat selalu diakhiri dengan titik dan ruang.

printf () secara detail

Karena ini adalah fungsi yang begitu banyak digunakan, saya hanya merasa layak mendapatkan sub-bagian dari miliknya sendiri. printf () menerima argumen yang diawali dengan simbol '%' dan diikuti dengan surat (atau lebih), sehingga mengatakannya seperti apa input yang seharusnya diharapkan. Kami telah bekerja sebelumnya dengan '%d', yang merupakan singkatan dari desimal, yang sesuai saat bekerja dengan bilangan bulat. Berikut daftar format format printf () yang lebih lengkap:

  • D, I - Integer
  • o - octal, tanpa awalan nol
  • 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 - pointer, void *, tergantung implementasi, standar antara distro linux

Saya sangat menyarankan Anda untuk meluangkan waktu untuk bermain dengan penentu ini, dan fakta bahwa saya tidak membahas lebih detail seperti presisi adalah karena Anda harus melakukan beberapa bacaan untuk diri sendiri. Saat Anda melakukannya, beri perhatian khusus pada bagian Daftar Argumen Variabel, dan perhatikan bahwa Linux memiliki perintah bernama printf, sebagai bagian dari Coreutils, jadi pastikan Anda menggunakan manpage Bagian 3 (Linux-spesifik, sebagai unices lainnya mungkin memiliki bagian manual yang ditata secara berbeda).

scanf () adalah kebalikan dari printf, karena dibutuhkan input dari pengguna alih -alih mengeluarkan ke pengguna. Penentu format hampir sama, dengan pengecualian tertentu tentang pelampung dan fakta bahwa ia tidak memiliki %p. Menurut Anda mengapa itu? Ini juga mendukung daftar argumen variabel, seperti printf ().

Akses file

Ini adalah bagian penting lain dari I/O dan karena C relatif rendah, memungkinkan Anda untuk membaca dan menulis file ke disk secara sederhana. Header yang menawarkan fungsionalitas sederhana ini Stdio.H, dan fungsi yang akan Anda gunakan adalah fopen (). Dibutuhkan nama file sebagai argumen, serta mode itu harus dibaca (baca/tulis (r, w). tambahkan (a) atau biner (b), sebagai lawan teks - tetapi implementasi yang terakhir tergantung pada sistem). fopen () mengembalikan pointer file, yang merupakan jenis. Sebelum apa pun, Anda akan membutuhkan pointer file, seperti yang diilustrasikan:

File *fp; / *pointer file */ fp = fopen ("/home/user/testfile.txt "," w "); fprintf (fp," file uji saya.")

Sederhana: Saya membuka file di disk saya dan menulis kepadanya string "file uji saya". Anda mungkin sudah menebak, saya memiliki beberapa latihan. Apakah itu akan membuat perbedaan jika file ada atau tidak? Bagaimana jika ada, tetapi kosong? Haruskah saya menggunakan apend alih -alih mode tulis? Mengapa?

Setelah menggunakan file, seseorang harus tutup itu. Ini penting, karena dengan menutup program Anda memberi tahu sistem operasi “Hei, saya sudah selesai dengan file ini. Tutup semua buffer kotor dan tulis file saya ke disk secara beradab, jadi tidak ada kehilangan data yang terjadi ".

fclose (fp);

Berikut adalah contoh kehidupan nyata menggunakan file I/O dari program Yest Kimball Hawkins, yang membantu kita mengingat dua hal: satu, bahwa karena desain UNIX (semuanya adalah file), Stdin, Stdout dan Stderr adalah file, jadi mereka dapat digunakan dengan fungsi file I/O, dan dua, bahwa bagian selanjutnya memperlakukan stderr dan keluar.

void store_time ()  jika (time_ok == false) kembali; / * Tidak ada informasi waktu, lewati *// /* Jam */ jika (tfield [0]> 24) fprintf (stderr, "error: jam input yang buruk: '%d' \ n", tfield [0]); keluar (1);  thetime-> tm_hour = tfield [0]; / * Menit */ jika (tfield [1]> 0)  jika (tfield [1]> 60) fprintf (stderr, "error: Bad Input Minute: '%d' \ n", tfield [1]); keluar (1);  thetime-> tm_min = tfield [1]; 

Mengobati kesalahan dengan stderr dan keluar

Program Anda harus memiliki cara untuk mengatasi kesalahan dan membiarkan OS dan pengguna tahu ada yang salah. Meskipun bagian ini sama sekali tidak merupakan disertasi tentang cara mengobati situasi Anda yang mungkin di C, ini berurusan dengan elemen Unix yang sangat berguna dan dipikirkan dengan baik: kesalahan output ke tempat lain, berbeda dari stdin, sehingga pengguna dapat memisahkan dua saat men -debug masalah. Juga, gunakan kode keluar sehingga pengguna tahu kapan program selesai dan kapan tidak. Inilah sebabnya mengapa Stderr ada, untuk bagian pertama, dan inilah mengapa keluar () juga ada, untuk bagian kedua. Pembaca yang cerdik sudah mendapatkan ide dari sampel kode di atas, jadi yang diperlukan hanyalah memberi tahu sistem untuk tidak mengeluarkan teks pada output default/standar, tetapi untuk "saluran" khusus yang ada terutama untuk ini. Mengenai keluar (), ia berfungsi seperti ini: nol untuk sukses, nilai lain antara 1 dan 255 jika terjadi kegagalan. Itu termasuk dalam stdlib.H dan tidak mengembalikan nilai. Terserah Anda, seperti yang dapat Anda lihat dalam kode Kimball di atas, untuk memberi tahu keluar jika ada masalah, sehingga dapat menginformasikan fungsi orang tua tentang status keluar.

Header yang berguna

Tak perlu dikatakan, mengetahui perpustakaan C standar adalah wajib jika Anda ingin serius dengan pengembangan C di Linux. Jadi, inilah beberapa header lain yang menawarkan fasilitas yang terkait dengan I/O dan banyak lagi:

rangkaian.H

Header ini akan terbukti sangat membantu saat bekerja dengan konversi string (strto*()), membandingkan string (strcmp ()) atau memeriksa panjang string (strlen ()).

ctype.H

Selain konversi kasus, ctype.H Menawarkan fungsi yang memeriksa berbagai sifat karakter. Beberapa dari mereka adalah isalnum (), isupper (), isalpha () atau isspace (), dan Anda diundang untuk menebak apa yang mereka lakukan dan bagaimana mereka bekerja.

Matematika.H

Banyak fungsi yang dibutuhkan untuk lebih dari empat operasi aritmatika dasar dapat ditemukan di sini, termasuk sin (), cos () atau exp ().

Bacaan lebih lanjut

Pembaca yang lebih berpengalaman akan memaku saya ke salib karena tidak memperlakukan subjek yang lebih maju seperti malloc () atau size_t. Seperti yang saya katakan berulang kali, seri ini tidak dimaksudkan sebagai buku online yang mengetahui semua untuk pengembangan C (bagaimanapun juga tidak ada hal seperti itu), melainkan titik awal yang baik untuk pemula. Saya merasa bahwa pengembang C masa depan harus relatif berpengalaman dalam pointer dan bagaimana alokasi memori bekerja sebelum ia mulai mengalami mimpi buruk malloc (). Setelah akhir seri ini, Anda disarankan untuk mendapatkan buku mendalam tentang C, setelah menanyakan beberapa pendapat dari yang lama (bukan h.P. Yang lama Lovecraft, saya harap), jadi Anda menghindari informasi yang salah atau menyesatkan. Meskipun Anda akan tahu tentang gratis () dan malloc () sampai kami selesai, mungkin yang terbaik adalah mendapatkan buku cetak dan tidur dengannya di bawah bantal Anda.

Kesimpulan

Artikel yang akan mengikuti yang satu ini akan sedikit lebih lama, karena kita akan mempelajari lebih jauh ke dalam cara pemrograman C UNIX, tetapi pemahaman yang baik tentang apa yang dikatakan di sini direkomendasikan untuk langkah selanjutnya semulus mungkin.

  • SAYA. C Perkembangan di Linux - Pendahuluan
  • Ii. Perbandingan antara C dan bahasa pemrograman lainnya
  • AKU AKU AKU. Jenis, Operator, Variabel
  • Iv. Alur kontrol
  • V. Fungsi
  • Vi. Pointer dan Array
  • Vii. Struktur
  • Viii. I/O Dasar
  • Ix. Gaya pengkodean dan rekomendasi
  • X. Membangun program
  • Xi. Kemasan untuk Debian dan Fedora
  • Xii. Mendapatkan paket di repositori resmi Debian

Tutorial Linux Terkait:

  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • Pengantar Otomatisasi Linux, Alat dan Teknik
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 20.04 FOSSA FOSSA Linux
  • Cara mendefinisikan zona firewalld khusus
  • Mint 20: Lebih baik dari Ubuntu dan Microsoft Windows?
  • Menguasai loop skrip bash
  • Unduh Linux
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 22.04 Jammy Jellyfish…
  • Ubuntu 20.04 Panduan
  • Instal Arch Linux di VMware Workstation