ຄໍາຕອບດ່ວນ: stdout ແລະ stderr ແມ່ນຫຍັງໃນ Linux?

ຜົນຜະລິດຂໍ້ຄວາມຈາກຄໍາສັ່ງໄປຫາ shell ແມ່ນສົ່ງຜ່ານ stdout (ມາດຕະຖານອອກ) stream. ຂໍ້ຄວາມຜິດພາດຈາກຄໍາສັ່ງຖືກສົ່ງຜ່ານ stderr (ຄວາມຜິດພາດມາດຕະຖານ).

stdout ແລະ stderr ແມ່ນຫຍັງ?

ໃນການຂຽນໂປລແກລມຄອມພິວເຕີ, ສາຍນ້ໍາມາດຕະຖານແມ່ນການເຊື່ອມຕໍ່ຂາເຂົ້າແລະຜົນຜະລິດຊ່ອງທາງການສື່ສານລະຫວ່າງໂຄງການຄອມພິວເຕີແລະສະພາບແວດລ້ອມຂອງມັນເມື່ອມັນເລີ່ມຕົ້ນປະຕິບັດ. ສາມການເຊື່ອມຕໍ່ຂາເຂົ້າ / ອອກ (I / O) ເອີ້ນວ່າ ການປ້ອນຂໍ້ມູນມາດຕະຖານ (stdin), ຜົນຜະລິດມາດຕະຖານ (stdout) ແລະຄວາມຜິດພາດມາດຕະຖານ (stderr).

stdout ໃນ Linux ແມ່ນຫຍັງ?

ຜົນຜະລິດມາດຕະຖານ, ບາງຄັ້ງຫຍໍ້ stdout, ຫມາຍເຖິງ ຕໍ່ກັບກະແສຂໍ້ມູນມາດຕະຖານທີ່ຜະລິດໂດຍໂປຣແກມສາຍຄຳສັ່ງ (ເຊັ່ນ: ໂປຣແກມໂໝດຂໍ້ຄວາມທັງໝົດ) ໃນ Linux ແລະລະບົບປະຕິບັດການທີ່ຄ້າຍ Unix ອື່ນໆ. … ໃນ​ກໍ​ລະ​ນີ​ນີ້​, ມັນ​ບອກ​ຄໍາ​ສັ່ງ​ໄຟລ​໌​ທີ່​ຈະ​ພິ​ຈາ​ລະ​ນາ​ທຸກ​ໄຟລ​໌​ໃນ​ລະ​ບົບ​ປະ​ຈຸ​ບັນ​ເປັນ​ການ​ໂຕ້​ຖຽງ​.

stdout ແມ່ນຫຍັງ?

Stdout, ເຊິ່ງເອີ້ນກັນວ່າຜົນຜະລິດມາດຕະຖານ, ແມ່ນ ຕົວອະທິບາຍໄຟລ໌ເລີ່ມຕົ້ນທີ່ຂະບວນການສາມາດຂຽນຜົນໄດ້ຮັບ. ໃນລະບົບປະຕິບັດການທີ່ຄ້າຍຄືກັບ Unix, ເຊັ່ນ Linux, macOS X, ແລະ BSD, stdout ຖືກກໍານົດໂດຍມາດຕະຖານ POSIX. ໝາຍເລກຕົວອະທິບາຍໄຟລ໌ເລີ່ມຕົ້ນຂອງມັນແມ່ນ 1. ໃນເຄື່ອງໝາຍປາຍທາງ, ມາດຕະຖານຜົນຜະລິດຈະເລີ່ມຢູ່ໜ້າຈໍຂອງຜູ້ໃຊ້.

ຄໍາສັ່ງ stderr ໃນ Linux ແມ່ນຫຍັງ?

Stderr, ເຊິ່ງເອີ້ນກັນວ່າຄວາມຜິດພາດມາດຕະຖານ, ແມ່ນ ຕົວອະທິບາຍໄຟລ໌ເລີ່ມຕົ້ນທີ່ຂະບວນການສາມາດຂຽນຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດ. ໃນລະບົບປະຕິບັດການທີ່ຄ້າຍຄືກັບ Unix, ເຊັ່ນ Linux, macOS X, ແລະ BSD, stderr ຖືກກໍານົດໂດຍມາດຕະຖານ POSIX. … ຢູ່ໃນເຄື່ອງໝາຍປາຍທາງ, ຄວາມຜິດພາດມາດຕະຖານຈະເລີ່ມຈາກໜ້າຈໍຂອງຜູ້ໃຊ້.

ຂ້ອຍຈະປ່ຽນເສັ້ນທາງ stderr ໄດ້ແນວໃດ?

ເພື່ອປ່ຽນເສັ້ນທາງ stderr ເຊັ່ນດຽວກັນ, ທ່ານມີທາງເລືອກຈໍານວນຫນຶ່ງ:

  1. ປ່ຽນເສັ້ນທາງ stdout ໄປຫາໄຟລ໌ຫນຶ່ງແລະ stderr ໄປຫາໄຟລ໌ອື່ນ: ຄໍາສັ່ງ> ອອກ 2> error.
  2. ປ່ຽນເສັ້ນທາງ stdout ໄປຫາໄຟລ໌ (>out ), ແລະຫຼັງຈາກນັ້ນ redirect stderr ໄປ stdout ( 2>&1 ): ຄໍາສັ່ງ>out 2>&1.

stdout ປະກອບມີ stderr ບໍ?

ຖ້າຄວາມເຂົ້າໃຈຂອງຂ້ອຍຖືກຕ້ອງ, stdin ແມ່ນໄຟລ໌ທີ່ໂປລແກລມຂຽນເຂົ້າໃນການຮ້ອງຂໍຂອງມັນເພື່ອດໍາເນີນການວຽກງານໃນຂະບວນການ, stdout ແມ່ນໄຟລ໌ທີ່ kernel ຂຽນຜົນຜະລິດຂອງມັນແລະຂະບວນການຮ້ອງຂໍໃຫ້ມັນເຂົ້າເຖິງຂໍ້ມູນຈາກ, ແລະ. stderr ແມ່ນໄຟລ໌ທີ່ຂໍ້ຍົກເວັ້ນທັງຫມົດຖືກໃສ່.

ຂ້ອຍຈະຊອກຫາ stderr ໃນ Linux ໄດ້ແນວໃດ?

ໂດຍປົກກະຕິ, STDOUT ແລະ STDERR ແມ່ນທັງສອງຜົນອອກໄປຫາເຄື່ອງໃຊ້ຂອງທ່ານ. ແຕ່ມັນເປັນໄປໄດ້ທີ່ຈະປ່ຽນເສັ້ນທາງທັງສອງແລະທັງສອງ. ຕົວຢ່າງ, ຂໍ້ມູນທີ່ຖືກສົ່ງໄປຫາ STDERR ໂດຍສະຄິບ CGI ມັກຈະສິ້ນສຸດລົງໃນໄຟລ໌ບັນທຶກທີ່ລະບຸໄວ້ໃນການຕັ້ງຄ່າຂອງເຄື່ອງແມ່ຂ່າຍເວັບ. ມັນເປັນໄປໄດ້ສໍາລັບໂຄງການທີ່ຈະໄດ້ຮັບຂໍ້ມູນກ່ຽວກັບ STDERR ໃນລະບົບ linux.

ການນໍາໃຊ້ & ໃນ Linux ແມ່ນຫຍັງ?

ໄດ້ & ເຮັດໃຫ້ຄໍາສັ່ງດໍາເນີນການໃນພື້ນຫລັງ. ຈາກ man bash : ຖ້າຄໍາສັ່ງຖືກຢຸດໂດຍຕົວຄວບຄຸມ &, shell ປະຕິບັດຄໍາສັ່ງໃນພື້ນຫລັງໃນ subshell. ແກະບໍ່ໄດ້ລໍຖ້າຄໍາສັ່ງທີ່ຈະສໍາເລັດ, ແລະສະຖານະກັບຄືນແມ່ນ 0.

stdout ໄປໃສໃນ Linux?

ຜົນຜະລິດມາດຕະຖານ, ດັ່ງທີ່ສ້າງຂຶ້ນໃນເວລາສ້າງຂະບວນການ, ໄປຫາ console, terminal ຂອງທ່ານຫຼື X terminal. ແນ່ນອນວ່າຜົນຜະລິດຈະຖືກສົ່ງໄປບ່ອນໃດແມ່ນຂຶ້ນກັບບ່ອນທີ່ຂະບວນການດັ່ງກ່າວມີຕົ້ນກໍາເນີດ. ຈະ [con]catenate ໄຟລ໌, ໂດຍຄ່າເລີ່ມຕົ້ນ, ກັບຜົນຜະລິດມາດຕະຖານຂອງພວກເຮົາເຊັ່ນ: console ຫຼືຫນ້າຈໍ terminal ຂອງພວກເຮົາ.

printf ຂຽນໃສ່ stdout ບໍ?

ໂທມາຫາ printf ຈະ ພິມເປັນ stdout, ໃນຂະນະທີ່ໂທຫາ fprint ໃນຂະນະທີ່ ພິມ ໄປຫາກະແສທີ່ລະບຸ. ໃນ ຍົກຕົວຢ່າງ ທ່ານໃຫ້, ການໂທຫາຫນ້າທີ່ທີສອງຈະ ພິມ ກັບ stderr. ນັບຕັ້ງແຕ່ທ່ານກໍາລັງພິມສະຕຣິງຫວ່າງເປົ່າ, ທ່ານຈະບໍ່ເຮັດຫຍັງຫຼາຍຢູ່ໃນສາຍນ້ໍາ, ດັ່ງນັ້ນທ່ານຈະບໍ່ເຫັນຫຍັງເກີດຂື້ນ.

ເຈົ້າສາມາດຂຽນໄປທີ່ stdout ໄດ້ບໍ?

ໃນເວລາທີ່ທ່ານໃຫ້ຄໍາຫມັ້ນສັນຍາທີ່ຈະສົ່ງຜົນຜະລິດໄປ stdout , ໂດຍພື້ນຖານແລ້ວທ່ານກໍາລັງເຮັດໃຫ້ມັນຂຶ້ນກັບຜູ້ໃຊ້ທີ່ຈະຕັດສິນໃຈວ່າຜົນຜະລິດນັ້ນຄວນຈະໄປ. ຖ້າທ່ານໃຊ້ printf(…) (ຫຼື fprintf (stdout, …) ) , ທ່ານກໍາລັງສົ່ງຜົນຜະລິດໄປຫາ stdout , ແຕ່ບ່ອນທີ່ຕົວຈິງແລ້ວສາມາດຂຶ້ນກັບວິທີທີ່ຂ້ອຍເອີ້ນໂຄງການຂອງເຈົ້າ.

stdout ຖືກບັນທຶກໄວ້ບໍ?

stdout ແມ່ນພຽງແຕ່ ໂຕຈັບໄຟລ໌ ໂດຍຄ່າເລີ່ມຕົ້ນແມ່ນເຊື່ອມຕໍ່ກັບ console, ແຕ່ສາມາດຖືກປ່ຽນເສັ້ນທາງ.

ມັກໂພສນີ້ບໍ່? ກະລຸນາແບ່ງປັນໃຫ້ ໝູ່ ເພື່ອນຂອງທ່ານ:
OS ມື້ນີ້