ນີ້ແມ່ນຄໍາສັ່ງ cstream ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍໆບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator
ໂຄງການ:
NAME
ສາຍນ້ ຳ — ສາຍນ້ໍຂໍ້ມູນໂດຍກົງ, ມີການຈໍາກັດແບນວິດ, FIFO, ສຽງ, ຊໍ້າຊ້ອນແລະ
ການເສີມຂະຫຍາຍການລາຍງານສະຫນັບສະຫນູນ.
ສະຫຼຸບສັງລວມ
ສາຍນ້ ຳ [-b num] [-B num] [-i ຊື່ເອກະສານ] [-I string] [-l] [-n num] [-o ຊື່ເອກະສານ] [-O string]
[-p ຊື່ເອກະສານ] [-t num] [-T num] [-v num] [-V] [ຊື່ເອກະສານ]
ລາຍລະອຽດ
Cstream ການກັ່ນຕອງການຖ່າຍທອດຂໍ້ມູນ, ຄືກັນກັບເຄື່ອງມື UNIX dd(1). ມັນມີແບບດັ້ງເດີມຫຼາຍ
syntax ເສັ້ນຄໍາສັ່ງ, ສະຫນັບສະຫນູນການຈໍາກັດແບນວິດທີ່ຊັດເຈນແລະການລາຍງານແລະການສະຫນັບສະຫນູນສໍາລັບ
FIFOs. ຂໍ້ຈໍາກັດຂໍ້ມູນແລະການຄິດໄລ່ອັດຕາການຜ່ານຈະເຮັດວຽກສໍາລັບໄຟລ໌> 4 GB.
Cstream ອ່ານຈາກວັດສະດຸປ້ອນມາດຕະຖານ ແລະຂຽນໃສ່ຜົນໄດ້ຮັບມາດຕະຖານ, ຖ້າບໍ່ມີຊື່ໄຟລ໌
ມອບໃຫ້. ມັນຍັງຈະ 'ສ້າງ' ຫຼື 'ຈົມ' ຂໍ້ມູນຖ້າຕ້ອງການ.
ຕົວເລືອກ:
-b num ກໍານົດຂະຫນາດບລັອກທີ່ໃຊ້ສໍາລັບການອ່ານ / ຂຽນ num. ຄ່າເລີ່ມຕົ້ນແມ່ນ 8192 bytes.
-B num Buffer input ເຖິງ num bytes ກ່ອນທີ່ຈະຂຽນ. ຄ່າເລີ່ມຕົ້ນແມ່ນຂະຫນາດຕັນ. ມັນແມ່ນ
ເກີດຄວາມຜິດພາດໃນການຕັ້ງອັນນີ້ໃສ່ອັນໃດອັນໜຶ່ງທີ່ຢູ່ຂ້າງລຸ່ມຂອງຂະໜາດບລັອກ. ມີປະໂຫຍດໃນເວລາຂຽນເທບ
ແລະຄ້າຍຄືກັນທີ່ມັກການຂຽນຂະຫນາດໃຫຍ່ຈໍານວນຫນ້ອຍຂອງຂະຫນາດນ້ອຍຫຼາຍ.
-c num ການດໍາເນີນງານພ້ອມໆກັນ. ໃຊ້ຂະບວນການແຍກຕ່າງຫາກສໍາລັບຜົນຜະລິດ. ນີ້ແມ່ນເປັນປະໂຫຍດໂດຍສະເພາະ
ປະສົມປະສານກັບທາງເລືອກ -B.
0 = ໃຊ້ຂະບວນການດຽວເທົ່ານັ້ນ (ຄ່າເລີ່ມຕົ້ນ)
1 = ຂະບວນການອ່ານຈະ buffer
2 = ຂະບວນການຂຽນຈະ buffer
3 = ຂະບວນການທັງສອງຈະ buffer.
ໃນການປະສົມປະສານກັບຂະຫນາດ buffer ຂະຫນາດໃຫຍ່ນີ້ມັກຈະໂຫລດຫນ່ວຍຄວາມຈໍາຂອງທ່ານ
ຢ່າງຮຸນແຮງ, ທຸກໆຄັ້ງທີ່ຜູ້ອ່ານໂອນ buffer ທີ່ມັນເກັບກໍາໄປຫາ
ນັກຂຽນ. ຖ້າທ່ານໃຊ້ -c 3 ແລະມີຂະຫນາດ buffer 128 Megabytes 256 MB ຂອງ
ຄວາມຊົງຈໍາຈະຖືກສໍາພັດໃນເວລາດຽວກັນ.
-i num
-o num ກໍານົດຊື່ໄຟລ໌ທີ່ຈະໃຊ້ສໍາລັບການປ້ອນຂໍ້ມູນຫຼືຜົນຜະລິດ, ຕາມລໍາດັບ. ຖ້າຫາກວ່າໄຟລ໌ຜົນຜະລິດ
ຊື່ແມ່ນ "-", ຂໍ້ມູນພຽງແຕ່ຈະຖືກຍົກເລີກ. ຖ້າຊື່ໄຟລ໌ທີ່ປ້ອນເຂົ້າແມ່ນ "-", ຂໍ້ມູນຈະ
ຈະຖືກຜະລິດ 'ອອກຈາກຊ່ອງຫວ່າງ'. ຖ້າຕົວເລືອກເຫຼົ່ານີ້ບໍ່ໄດ້ຖືກມອບໃຫ້, stdin/stout ຈະເປັນ
ໃຊ້. ຖ້າທ່ານຕ້ອງການໃຫ້ -o or -i ທາງເລືອກແລະຕ້ອງການ stdin / stdout, ລະບຸ
string ເປົ່າ, ແບບນີ້:
cstream -i''
ຖ້າການສະຫນັບສະຫນູນ TCP ໄດ້ຖືກລວບລວມຢູ່ໃນ (ຄ່າເລີ່ມຕົ້ນ), hostname:portnumber ຈະພະຍາຍາມ
ເຊື່ອມຕໍ່ກັບໂຮດທີ່ລະບຸໄວ້ໃນພອດທີ່ລະບຸໄວ້ແລະ :portnumber ຈະເປີດ a
ເຕົ້າຮັບ TCP ໃນເຄື່ອງທ້ອງຖິ່ນແລະລໍຖ້າການເຊື່ອມຕໍ່ມາຮອດ. ຄວາມປອດໄພ
ໝາຍເຫດ: cstream ບໍ່ມີກົນໄກການຈຳກັດ hosts ທີ່ອາດຈະເຊື່ອມຕໍ່ກັບອັນນີ້
ທ່າເຮືອ. ເວັ້ນເສຍແຕ່ວ່າເຄື່ອງຂອງທ່ານມີຕົວກອງເຄືອຂ່າຍອື່ນ, ທຸກຄົນຈະສາມາດ
ເຊື່ອມຕໍ່.
-I string
-O string
ລະບຸປະເພດຂອງໄຟລ໌ປ້ອນຂໍ້ມູນ ແລະຜົນຜະລິດຕາມລໍາດັບ.
ຖ້າສາຍ
ປະກອບມີ 'f', fifo ຈະຖືກສ້າງຂື້ນ.
ຖ້າສາຍ
ປະກອບມີ 'a', ໄຟລ໌ຈະຖືກສົມມຸດວ່າເປັນສຽງທີ່ເຂົ້າກັນໄດ້ກັບ opensound
ອຸປະກອນແລະຈະໄດ້ຮັບການສະຫຼັບກັບການຕັ້ງຄ່າຄ້າຍຄື CD.
ຖ້າສາຍ
ປະກອບມີ 't', ສໍາເນົາຂອງນ້ໍາຈະຖືກສົ່ງໄປຫາຕົວອະທິບາຍໄຟລ໌ 3.
ຖ້າສາຍ
ປະກອບມີ 'N', TCP ຈະບໍ່ຖືກໃຊ້ສໍາລັບໄຟລ໌ນັ້ນເຖິງແມ່ນວ່າຊື່ມີ ":".
-l ລວມມີການນັບແຖວໃນສະຖິຕິ.
-n num ຈໍາກັດຈໍານວນທັງຫມົດຂອງຂໍ້ມູນທີ່ num. ຖ້າມີການປ້ອນຂໍ້ມູນເພີ່ມເຕີມ, ມັນຈະມີ
ຖືກຍົກເລີກ, ສາຍນ້ ຳ ຈະອອກຫຼັງຈາກທີ່ໄດ້ກໍານົດໄວ້. ຖ້າມີຫນ້ອຍ
input, ຂີດຈໍາກັດຈະບໍ່ບັນລຸແລະບໍ່ມີຂໍ້ຜິດພາດຈະຖືກສົ່ງສັນຍານ.
num ອາດຈະມີ 'k', 'm' ຫຼື 'g' ຕໍ່ໄປເຊິ່ງຫມາຍຄວາມວ່າ Kilobytes, Megabytes ຫຼື
Gigabyte (ທີ່ Kilo = 1024). ນີ້ໃຊ້ກັບຕົວເລືອກຕົວເລກທັງໝົດ.
-p ຊື່ເອກະສານ
ຂຽນ id ຂະບວນການຂອງ cstream ກັບ ຊື່ເອກະສານ. ຖ້າ cstream ໃຊ້ຕົວຂຽນແຍກຕ່າງຫາກ
ຂະບວນການ (ທາງເລືອກ -c), ນີ້ແມ່ນ pid ຂອງຂະບວນການພໍ່ແມ່ (ຜູ້ອ່ານ).
-t num ຈໍາກັດການຜ່ານຂອງນ້ໍາຂໍ້ມູນທີ່ num bytes/ວິນາທີ. ການຈໍາກັດແມ່ນເຮັດຢູ່ທີ່
ດ້ານການປ້ອນຂໍ້ມູນ, ທ່ານສາມາດອີງໃສ່ cstream ບໍ່ຍອມຮັບຫຼາຍກ່ວາອັດຕານີ້. ຖ້າ
ຕົວເລກທີ່ທ່ານໃຫ້ແມ່ນບວກ, cstream ສະສົມຄວາມຜິດພາດແລະພະຍາຍາມຮັກສາ
ອັດຕາລວມຢູ່ໃນມູນຄ່າທີ່ລະບຸ, ສໍາລັບກອງປະຊຸມທັງຫມົດ. ຖ້າທ່ານໃຫ້ທາງລົບ
ຈໍານວນ, ມັນເປັນຂໍ້ຈໍາກັດສູງສຸດສໍາລັບການອ່ານ / ຂຽນແຕ່ລະຄູ່ໂທລະບົບ. ໃນຄໍາສັບຕ່າງໆອື່ນໆ:
ຈໍານວນລົບຈະບໍ່ເກີນຂອບເຂດຈໍາກັດນັ້ນ, ຈໍານວນບວກຈະເກີນ
ມັນເພື່ອເຮັດໃຫ້ດີສໍາລັບການ underutilization ທີ່ຜ່ານມາ.
-T num ລາຍງານການສົ່ງຜ່ານທຸກວິນາທີ.
-v num ກໍານົດລະດັບ verbose ເປັນ num. ໂດຍຄ່າເລີ່ມຕົ້ນ, ມັນຖືກກໍານົດເປັນ 0, ຊຶ່ງຫມາຍຄວາມວ່າບໍ່ມີຂໍ້ຄວາມໃດໆ
ສະແດງຕາບໃດທີ່ບໍ່ມີຂໍ້ຜິດພາດເກີດຂຶ້ນ. ຄ່າຂອງ 1 ຫມາຍຄວາມວ່າຈໍານວນຂໍ້ມູນທັງຫມົດ
ແລະ throughput ຈະຖືກສະແດງໃນຕອນທ້າຍຂອງການດໍາເນີນໂຄງການ. ຄ່າຂອງ 2 ຫມາຍຄວາມວ່າ
ອັດຕາການໂອນເງິນນັບຕັ້ງແຕ່ການສິ້ນສຸດຂອງຄູ່ອ່ານ / ຂຽນຄັ້ງທໍາອິດຈະຖືກລາຍງານ
(ເປັນປະໂຫຍດເມື່ອມີການຊັກຊ້າເບື້ອງຕົ້ນ). ຄ່າຂອງ 3 ຫມາຍຄວາມວ່າຈະມີ
ການວັດແທກແຍກຕ່າງຫາກສໍາລັບການອ່ານແລະຂຽນ. ທາງເລືອກນີ້ແມ່ນການບໍລິໂພກຊັບພະຍາກອນແລະ
ໃນປັດຈຸບັນບໍ່ໄດ້ປະຕິບັດ. ຄ່າຂອງ 4 ໝາຍ ຄວາມວ່າແຈ້ງການກ່ຽວກັບແຕ່ລະອັນ
ອ່ານ / ຂຽນຈະສະແດງ. ຄຸນຄ່າສູງລວມມີຂໍ້ຄວາມທຸກປະເພດຂອງຕ່ໍາ
ຄ່າ.
-V ພິມໝາຍເລກເວີຊັນເພື່ອ stdout ແລະອອກດ້ວຍ 0.
ຊື່ເອກະສານ ຊື່ໄຟລ໌ດຽວເປັນອາກິວເມັນສຸດທ້າຍໂດຍບໍ່ມີການປ່ຽນທາງເລືອກຈະຖືກໃຊ້ເປັນ
input file ຖ້າ -i ບໍ່ໄດ້ຖືກນໍາໃຊ້.
SIGUSR1
ເຂົ້າສູ່ລະບົບ ການສົ່ງ SIGUSR1 (ຫຼື SIGINFO, ເຊິ່ງປົກກະຕິແລ້ວແມ່ນແຜນທີ່ກັບ Control-T ໃນແປ້ນພິມຂອງທ່ານ)
ກັບ cstream ເຮັດໃຫ້ມັນສະແດງອັດຕາການສົ່ງຜ່ານໄປຫາ stderr. ກະແສຈະ
ສືບຕໍ່ຄືກັບວ່າບໍ່ມີຫຍັງເກີດຂຶ້ນ.
SIGUSR2 ອອກຈາກແລະລາຍງານອັດຕາການສົ່ງຜ່ານ, ຖ້າຮ້ອງຂໍ.
ຕິດຕາມ ຂ້ອຍພົບວ່າຕົນເອງສົ່ງ SIGHUP ໂດຍບັງເອີນເລື້ອຍໆເກີນໄປ. ແຕ່ບໍ່ສົນໃຈຫຼືໃຊ້ໃນທາງທີ່ຜິດ
SIGHUP ບໍ່ແມ່ນທາງເລືອກສໍາລັບຂ້ອຍ. ດັ່ງນັ້ນ, ເມື່ອ ສາຍນ້ ຳ ໄດ້ຮັບ SIGHUP, ມັນຈະລໍຖ້າ 5
ວິນາທີສໍາລັບ SIGHUP ອື່ນ, ເພື່ອໃຫ້ຜູ້ໃຊ້ໂອກາດທີ່ຈະແກ້ໄຂຄວາມຜິດພາດທີ່ເປັນໄປໄດ້.
ຖ້າບໍ່ໄດ້ຮັບ SIGHUP ເພີ່ມເຕີມ, ສາຍນ້ ຳ ຂ້າຕົວເອງດ້ວຍ SIGHUP.
ຕົວຢ່າງ
ສາຍນ້ ຳ -o tmpfile -v 1 -n 384m -i -
ຂຽນຂໍ້ມູນ 384 Megabytes ຂອງຂໍ້ມູນທີ່ບໍ່ໄດ້ລະບຸໄວ້ໃນໄຟລ໌ tmpfile ແລະສະແດງ verbose
ອັດຕາການຜ່ານ. ເຮັດໃຫ້ມາດຕະຖານທີ່ດີ, ຄວາມໄວຂອງ / dev / null ແຕກຕ່າງກັນຫຼາຍຈາກ
ລະບົບກັບລະບົບ.
ສາຍນ້ ຳ -i tmpfile -v 1 -n 384m -o -
ອ່ານໄຟລ໌ດຽວກັນກັບຄືນໄປບ່ອນໃນແລະຍົກເລີກຂໍ້ມູນ.
ສາຍນ້ ຳ -b 2000 -t 10000 / var / log / ຂໍ້ຄວາມ
ຈະສະແດງໄຟລ໌ໃນຄວາມໄວເບິ່ງຫຼາຍຫຼືຫນ້ອຍ.
dump 0sf 400000 - / | ສາຍນ້ ຳ -v 1 -b 32768 -o /dev/rst0 -p pidfile
ຂ້າ -USR1 `ແມວ pidfile`
ຂຽນຜົນໄດ້ຮັບຈາກ dump(1) ເພື່ອ tape. ແຕ່ລະຄັ້ງທີ່ສັນຍານຖືກສົ່ງ, ຜ່ານ
ແລະອັດຕາຂໍ້ມູນມາເຖິງຕອນນັ້ນຈະຖືກສະແດງ.
ສາຍນ້ ຳ -t 176400 -i /dev/dsp0 -I f -o -
ເຮັດໃຫ້ປະເພດຂອງການ emulator ສຽງບັດທີ່ອາດຈະຖືກນໍາໃຊ້ເພື່ອທົດສອບຄໍາຮ້ອງສະຫມັກສຽງທີ່
ຕ້ອງການບາງສິ່ງບາງຢ່າງທີ່ຈະຂຽນທີ່ຈໍາກັດອັດຕາການຂໍ້ມູນເປັນ soundcard ທີ່ແທ້ຈິງເຮັດໄດ້. ນີ້
ແນ່ນອນບໍ່ໄດ້ເຮັດວຽກເມື່ອແອັບພລິເຄຊັນພະຍາຍາມຂຽນຂໍ້ມູນໂດຍໃຊ້ ແຜນທີ່(2) ແລະ
ແອັບພລິເຄຊັນຕ້ອງບໍ່ສົນໃຈຂໍ້ຜິດພາດໃນເວລາທີ່ມັນພະຍາຍາມກໍານົດພາລາມິເຕີ soundcard ໂດຍໃຊ້
ioctls(2).
ສາຍນ້ ຳ -t 176400 -i /dev/dsp0 -I f -o /dev/dsp1 -O f
emulator soundcard ທີ່ຄ້າຍຄືກັນ, ຍົກເວັ້ນແຕ່ວ່າມັນອະນຸຍາດໃຫ້ທ່ານເພື່ອ grab ຂໍ້ມູນຂອງທ່ານ
ແອັບພລິເຄຊັນສົ່ງໄປຫາມັນຈາກ fifo ອື່ນໆ, ໃນຂະນະທີ່ຍັງມີເວລາທີ່ຊັດເຈນ.
ສາຍນ້ ຳ -ໂອ -o /dev/dsp0 myhost.mydomain.com: 17324
ເຊື່ອມຕໍ່ພອດ 3333 ຢູ່ໃນໂຮດ myhost.mydomain.com ແລະຂໍ້ມູນໃດກໍ່ຕາມທີ່ມັນພົບເຫັນຈະ
ຖືກສົ່ງໄປຫາແຜ່ນສຽງ, ດ້ວຍການຕັ້ງຄ່າທີ່ເຫມາະສົມສໍາລັບການຫຼິ້ນສະເຕີຣອຍທີ່ມີຄຸນນະພາບ CD.
ສາຍນ້ ຳ -i myaudiofile.raw -o : 17324
ນີ້ຈະເປີດເຄື່ອງແມ່ຂ່າຍ TCP ໃນພອດ 17324 ແລະລໍຖ້າຈົນກ່ວາຜູ້ໃດຜູ້ຫນຶ່ງເຊື່ອມຕໍ່ (ສໍາລັບ
ຕົວຢ່າງ, ເສັ້ນຄໍາສັ່ງຈາກຕົວຢ່າງທີ່ຜ່ານມາ). ຫຼັງຈາກນັ້ນ, ມັນຈະສົ່ງເນື້ອໃນ
ຂອງ myaudiofile.raw ລົງກະແສ TCP (ສໍາລັບຕົວຢ່າງສຽງທີ່ຜ່ານມາ, ໂດຍປົກກະຕິ a
CD audiotrack ຄືກັບທີ່ທ່ານໄດ້ຮັບຈາກ tosha ຫຼື cdparanoia utilities).
ສາຍນ້ ຳ -OD -o ໄຟລ໌ຂອງຂ້ອຍ
ຂຽນເພື່ອຍື່ນ myfile ກັບ O_DIRECT. ມັນມັກຈະຫມາຍຄວາມວ່າລະບົບໄຟລ໌ buffer
cache ຈະບໍ່ພະຍາຍາມ cache ໄຟລ໌ນີ້. ທ່ານສາມາດນໍາໃຊ້ເພື່ອປ້ອງກັນການຄັດລອກ
ການດໍາເນີນງານຈາກການກິນອາຫານເຖິງຄວາມຊົງຈໍາທາງດ້ານຮ່າງກາຍ. ໃຫ້ສັງເກດວ່າເມື່ອ cstream ພົບ a
ຂຽນຂໍ້ຜິດພາດມັນຈະປ່ຽນໄຟລ໌ຜົນຜະລິດຈາກ O_DIRECT ໄປຫາໄຟລ໌ປົກກະຕິແລະຂຽນ
ບລັອກຕໍ່ໄປທັງໝົດໂດຍບໍ່ມີ O_DIRECT ຖ້າຂຽນໂດຍບໍ່ມີ O_DIRECT ສຳເລັດ. ໃນການປະຕິບັດ
ມັນມັກຈະຫມາຍຄວາມວ່າບລັອກສຸດທ້າຍຂອງເຈົ້າ, ຖ້າບໍ່ແມ່ນຫຼາຍຂອງບລັອກລະບົບໄຟລ໌
ຂະຫນາດ, ຍັງຈະໄດ້ຮັບການຂຽນເຂົ້າໄປໃນໄຟລ໌ (ຈໍານວນສູງສຸດຂອງຂໍ້ມູນທີ່ຂຽນ
ໂດຍບໍ່ມີການ O_DIRECT ແມ່ນ blocksize ລົບຫນຶ່ງຂອງທ່ານ). ວິທີການນັ້ນ cstream ຮັບປະກັນວ່າ
ໄຟລ໌ຜົນຜະລິດມີຄວາມຍາວຂອງການປ້ອນຂໍ້ມູນ, ແນວໃດກໍຕາມແປກທີ່ຄວາມຍາວແມ່ນແລະບໍ່ວ່າຈະເປັນ
ສິ່ງທີ່ຈໍາກັດ OS ຂອງທ່ານສະຖານທີ່ກ່ຽວກັບການ O_DIRECT ຜົນຜະລິດ. ອີກເທື່ອຫນຶ່ງ, cstream ຈະ *not* pad
ຜົນຜະລິດກັບຂະຫນາດຕັນ, ທ່ານໄດ້ຮັບໄຟລ໌ດຽວກັນແລະຂະຫນາດໄຟລ໌ເປັນຖ້າຫາກວ່າບໍ່ໄດ້ໃຊ້
O_DIRECT, ໃນຄ່າໃຊ້ຈ່າຍຂອງການປ່ຽນເປັນທີ່ບໍ່ແມ່ນ O_DIRECT ທຸກຄັ້ງທີ່ບລັອກບໍ່ຖືກຕ້ອງ
ຂະຫນາດ.
ສາຍນ້ ຳ -i : 3333 | dd obs=8192 | ./cstream -omyfile -v7 -OD
ນີ້ແມ່ນສິ່ງທີ່ທ່ານຕ້ອງເຮັດເພື່ອ buffer TCP input, ດັ່ງນັ້ນ cstream ສຸດທ້າຍຈະບໍ່
ປ່ຽນອອກຈາກ O_DIRECT ກ່ອນໄວອັນຄວນເນື່ອງຈາກອ່ານສັ້ນ. ຖ້າການປ້ອນຂໍ້ມູນຂອງທ່ານສາມາດເຮັດໄດ້
ການອ່ານສັ້ນ (ເຊັ່ນ: TCP), ແລະທ່ານຕ້ອງການໃຫ້ແນ່ໃຈວ່າ O_DIRECT ຍັງຄົງມີຜົນ,
ທ່ານຕ້ອງການ buffer ລະຫວ່າງ TCP stream ແລະ O_DIRECT stream. ຕັ້ງແຕ່ cstream
ຍັງບໍ່ທັນຮອງຮັບການປ້ອນຂໍ້ມູນ ແລະຜົນຜະລິດຂະໜາດບລັອກທີ່ແຕກຕ່າງກັນ, dd ແມ່ນເໝາະສົມຢູ່ທີ່ນີ້.
ໃຫ້ສັງເກດວ່ານີ້ເປັນສິ່ງຈໍາເປັນພຽງແຕ່ຖ້າ OS ຕ້ອງການລະບົບໄຟລ໌ຫຼາຍ
ຂະໜາດບລັອກສຳລັບ O_DIRECT. ໃນເວລາຂອງການຂຽນນີ້ການກໍ່ສ້າງນີ້ແມ່ນຈໍາເປັນຢູ່ໃນ
Linux ສໍາລັບການໃຊ້ TCP streams ກັບ O_DIRECT, ແຕ່ມັນບໍ່ຈໍາເປັນໃນ FreeBSD.
ສາຍນ້ ຳ - ກະດູກ -o ໄຟລ໌ຂອງຂ້ອຍ
ຂຽນໄຟລ໌ myfile ກັບ O_SYNC. ນີ້ຫມາຍຄວາມວ່າໂດຍເວລາທີ່ການໂທລະບົບກັບຄືນມາ
ຂໍ້ມູນແມ່ນເປັນທີ່ຮູ້ຈັກຢູ່ໃນແຜ່ນ. ນີ້ບໍ່ແມ່ນສິ່ງດຽວກັນກັບ O_DIRECT. O_DIRECT
ສາມາດເຮັດ buffering ຂອງຕົນເອງໄດ້, ດ້ວຍ O_SYNC ບໍ່ມີ buffering ເລີຍ. ໃນເວລາຂອງ
ການຂຽນນີ້, O_SYNC ໃນທັງ Linux ແລະ FreeBSD ແມ່ນຊ້າຫຼາຍ (1/5 ຫາ 1/10th ຂອງ
ການຂຽນປົກກະຕິ) ແລະ O_DIRECT ແມ່ນໄວສົມຄວນ (1/4 ຫາ 1/2 ຂອງການຂຽນປົກກະຕິ). ເຈົ້າ
ສາມາດລວມ O_SYNC ແລະ O_DIRECT.
ຄວາມຜິດພາດ
ອອກຈາກລະຫັດ 0 ຫມາຍເຖິງຄວາມສໍາເລັດ.
ອອກຈາກລະຫັດ 1 ຫມາຍຄວາມວ່າມີຂໍ້ຜິດພາດໃນການນໍາໃຊ້ syntax ຂອງເສັ້ນຄໍາສັ່ງ.
ອອກຈາກລະຫັດ 2 ຫມາຍເຖິງຄວາມຜິດພາດອື່ນໆ, ໂດຍສະເພາະແມ່ນຄວາມຜິດພາດຂອງລະບົບ.
ແມງໄມ້
ຄວນມີທາງເລືອກທີ່ຈະເລີ່ມຕົ້ນຂຽນໂດຍກົງຫຼັງຈາກອ່ານທໍາອິດຈົບລົງແລະຫຼັງຈາກນັ້ນຕື່ມຂໍ້ມູນໃສ່
buffer ທີ່ມີການອ່ານຢູ່ໃນພື້ນຫລັງ. ໃນປັດຈຸບັນການຂຽນຈະບໍ່ເລີ່ມຕົ້ນກ່ອນຜູ້ອ່ານ
ໄດ້ເຕີມເຕັມ buffer ຢ່າງສົມບູນເປັນຄັ້ງທໍາອິດ.
ບໍ່ແມ່ນຂໍ້ບົກພ່ອງ: ລະຫັດທີ່ຈະເຮັດ O_DIRECT ແມ່ນມີຄວາມຊັບຊ້ອນສົມຄວນ. ມັນຈະກັບຄືນສູ່ສະພາບປົກກະຕິ
I/O ເກີດຄວາມຜິດພາດ. ແຕ່ກ່ອນທີ່ຈະເຮັດມັນຮູ້ກ່ຽວກັບຄວາມຕ້ອງການຂອງລະບົບບລັອກທັງສອງ
(ຈະເປັນຄ່າເລີ່ມຕົ້ນ I/O blocksize ໃດກໍ່ຕາມລະບົບໄຟລ໌ຂອງໄຟລ໌ຜົນຜະລິດຢູ່ໃນ) ແລະຫນ້າ
ຂໍ້ກໍານົດການຈັດຕໍາແຫນ່ງ (I/O ຈະເກີດຂຶ້ນຈາກ buffer ການຈັດຫນ້າ). ຢ່າງໃດກໍຕາມ, ໄດ້
ການປະສົມປະສານຂອງການອ່ານ/ຂຽນພ້ອມໆກັນ (-c ທາງເລືອກ) ແລະ O_DIRECT ບໍ່ໄດ້ຖືກທົດສອບເກີນກວ່າ
ການກວດສອບພື້ນຖານວ່າມັນໄດ້ຮັບການທົດສອບທີ່ຖືກຕ້ອງ.
ໃຊ້ cstream ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net