Apakah maksud linux eof?

藏色散人
Lepaskan: 2023-03-25 09:20:09
asal
2530 orang telah melayarinya

linux eof secara amnya merujuk kepada hujung fail; EOF ialah istilah komputer, singkatan End Of File Dalam sistem pengendalian, ia bermakna sumber data tidak mempunyai data lagi untuk dibaca , dalam baris baharu Pada mulanya, tekan "Ctrl+D" untuk mewakili EOF.

Apakah maksud linux eof?

Persekitaran pengendalian tutorial ini: sistem linux5.9.8, komputer Dell G3.

Apakah maksud linux eof?

EOF ialah istilah komputer, iaitu singkatan kepada End Of File Ia bermaksud dalam sistem operasi sumber data tiada lagi data untuk dibaca. Di bawah Linux, ia biasanya merujuk kepada penghujung fail.

Bagaimana untuk menggunakan EOF untuk menentukan sama ada program telah membaca hingga akhir fail?

Idea yang sangat penting dalam sistem Linux ialah: semuanya adalah fail. Sama ada ia adalah input standard, fail teks biasa dalam sistem fail, atau aliran rangkaian, ia boleh dianggap sebagai fail, dan ia boleh dibaca dan ditulis melalui fungsi baca/tulis. Oleh itu, jenis fail yang berbeza mempunyai cara yang berbeza untuk menilai sama ada penghujung fail telah dibaca Perkara berikut adalah seperti berikut:

  • Fail teks biasa

  • Fail input standard (stdin)

  • fail strim soket

Tiga jenis fail ini akan diperkenalkan untuk menentukan sama ada ia telah baca hingga akhir kaedah fail.

Fail teks biasa

Fail biasa di sini merujuk kepada fail teks yang biasanya kita lihat melalui pengurus fail, yang wujud dalam sistem Linux, dan saiz fail ditetapkan .

Untuk fail jenis ini, cara sistem Linux menentukan sama ada fail teks biasa telah dibaca hingga akhir fail ialah: fungsi baca akan mengekalkan penunjuk baca untuk fail yang dibuka, dan kemudian gunakan penunjuk ini untuk mengira kedudukan permulaan fail Nilai penunjuk dikurangkan untuk mendapatkan nombor bait mengimbangi berbanding kedudukan mula fail Akhir sekali, nombor bait mengimbangi itu dibandingkan dengan saiz fail itu sendiri nombor bait mengimbangi relatif kepada kedudukan mula fail adalah lebih besar daripada fail itu sendiri, maka pemalar EOF dikembalikan, menunjukkan bahawa penghujung fail telah dibaca.

Jadi, mengikut penulisan di atas, jika fail mengandungi n aksara, maka operasi dalaman gelung while akan berjalan n+1 kali. Oleh itu, cara paling selamat untuk menulisnya adalah seperti berikut:

int c = fgetc(fp);
while (c != EOF) {
    do something;
    c = fgetc(fp);
}
if (feof(fp)) {
    printf("\n End of file reached.");
} else {
    printf("\n Something went wrong.");
}
Salin selepas log masuk

Fail input standard

Fail input standard (stdin) yang sepadan dengan input papan kekunci persisian sistem Linux, ia disarikan ke dalam fail, fail strim dengan tepat. Perbezaan terbesar antara fail jenis ini dan fail teks biasa di atas ialah saiz failnya tidak tetap. Ia seperti hujung masuk paip air dan boleh menerima input pada bila-bila masa.

Ia adalah tepat kerana ciri penstriman fail input standard bahawa adalah mustahil untuk menentukan sama ada penghujung fail telah dibaca melalui kaedah perbandingan saiz fail yang dinyatakan di atas. Oleh itu, cara sistem Linux menentukan sama ada fail input standard telah dibaca hingga akhir fail adalah dengan menetapkan tanda input khas untuk menunjukkan penghujung fail Dalam sistem Linux, tanda ini ialah kombinasi kekunci Ctrl+ D. Apabila sistem menangkap kombinasi kekunci ini Bila, biarkan fungsi baca r mengembalikan pemalar EOF untuk memaklumkan program bahawa ia telah membaca ke penghujung fail standard.

fail strim soket

fail strim soket adalah serupa dengan fail input standard, dan ia membaca data daripada rangkaian, jadi dua di atas Tiada kaedah untuk menentukan sama ada fail telah dibaca hingga akhir boleh digunakan untuk fail strim soket.

Jadi bagaimanakah proses klien menentukan sama ada proses pelayan telah selesai menulis semua data?

Dalam fail aliran soket, apabila proses klien membaca data yang dihantar oleh proses pelayan jauh melalui fungsi baca, ia menggunakan menyekat I/O untuk membaca. Selagi sambungan antara klien dan pelayan tidak diputuskan, jika pelayan tidak menulis data ke soket, operasi baca klien akan disekat sehingga data baharu ditulis ke pelayan.

Jika proses pelayan menutup sambungan soket, klien akan menerima paket FIN protokol TCP yang dihantar daripada pelayan, dan kemudian proses klien pada asalnya disekat dalam bacaan menunggu untuk menerima data daripada proses pelayan fungsi akan dibangkitkan pada masa ini dan mengembalikan nilai 0. Ini adalah sedikit berbeza daripada keadaan di mana dua jenis fail yang kami nyatakan sebelum ini mengembalikan EOF (nilai ialah -1) selepas membaca akhir fail Oleh itu, apabila membaca dari soket dalam program, bendera untuk menilai akhir daripada aliran data bukan -1 tetapi 0. .

Di Linux, menekan Ctrl-D pada permulaan baris baharu bermakna EOF (jika anda menekan Ctrl-D di tengah baris, ia bermakna mengeluarkan kawasan penimbal "input standard", jadi ini Anda mesti menekan Ctrl-D dua kali); dalam Windows, Ctrl-Z bermaksud EOF. (Dengan cara ini, menekan Ctrl-Z dalam Linux bermakna mengganggu proses dan menggantungnya di latar belakang. Anda boleh menggunakan arahan fg untuk beralih kembali ke latar depan; menekan Ctrl-C bermakna menamatkan proses.)

那么,如果真的想输入Ctrl-D怎么办?这时必须先按下Ctrl-V,然后就可以输入Ctrl-D,系统就不会认为这是EOF信号。Ctrl-V表示按”字面含义”解读下一个输入,要是想按”字面含义”输入Ctrl-V,连续输入两次就行了。

所以,一个简单的从 socket 文件读取数据的样例代码,通常是下面这样的:

char recvline[MAX_LINE_LENGTH];
int read_count;
while ((read_count = read(sock_fd, recvline, MAX_LINE_LENGTH)) > 0)
{
    printf("%s\n", "String received from server: ");
    fputs(recvline, stdout);
}
Salin selepas log masuk

总结

所以,一定要记住这样一个概念:EOF 是一个常量而不是一个字符!。

推荐学习:《linux视频教程

Atas ialah kandungan terperinci Apakah maksud linux eof?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!