คำถามติดแท็ก c

C เป็นภาษาโปรแกรมคอมพิวเตอร์ทั่วไปที่ใช้สำหรับระบบปฏิบัติการเกมและงานที่มีประสิทธิภาพสูงอื่น ๆ และแตกต่างอย่างชัดเจนจาก C ++ ได้รับการพัฒนาในปี 1972 โดย Dennis Ritchie สำหรับใช้กับระบบปฏิบัติการ Unix

4
ทำไม FreeBSD ถึงเลิกใช้ GCC เพื่อสนับสนุน Clang / LLVM
ดังนั้นผมท่องเน็ตและสะดุดเข้ากับบทความนี้ มันเป็นพื้นระบุว่าFreeBSDเริ่มต้นจากรุ่น 10 ขึ้นไปจะเลิกGCCในความโปรดปรานของเสียงดังกราว / LLVM จากสิ่งที่ฉันได้เห็นรอบสุทธิเพื่อให้ห่างไกลเสียงดังกราว / LLVMเป็นโครงการที่มีความทะเยอทะยานอย่างเป็นธรรม แต่ในแง่ของความน่าเชื่อถือมันไม่สามารถจับคู่GCC มีเหตุผลทางเทคนิคใดบ้างFreeBSD กำลังเลือก LLVM เป็นโครงสร้างพื้นฐานคอมไพเลอร์ของพวกเขาหรือไม่หรือว่าเรื่องทั้งหมดจะถูกนำไปใช้กับ GNU / GPL เทียบกับใบอนุญาต BSD นิรันดร์หรือไม่? คำถามนี้มีข้อมูลที่เกี่ยวข้องเกี่ยวกับการใช้GCCในFreeBSD
241 freebsd  compiling  gcc  c  llvm 

10
เหตุใด argv จึงรวมชื่อโปรแกรม
โปรแกรม Unix / Linux ทั่วไปยอมรับอินพุตบรรทัดคำสั่งเป็นจำนวนอาร์กิวเมนต์ ( int argc) และเวกเตอร์อาร์กิวเมนต์ ( char *argv[]) องค์ประกอบแรกของargvคือชื่อโปรแกรม - ตามด้วยข้อโต้แย้งที่เกิดขึ้นจริง ทำไมชื่อโปรแกรมที่ส่งผ่านไปยังไฟล์ที่เรียกทำงานได้เป็นอาร์กิวเมนต์? มีตัวอย่างของโปรแกรมที่ใช้ชื่อของตัวเอง (อาจเป็นexecสถานการณ์บางอย่าง) หรือไม่?

7
มีการใช้เธรดเป็นกระบวนการบน Linux หรือไม่
ฉันจะอ่านหนังสือเล่มนี้การเขียนโปรแกรม Linux ขั้นสูงโดย Mark Mitchell, Jeffrey Oldham และ Alex Samuel มันมาจากปี 2001 เก่าไปหน่อย แต่ฉันคิดว่ามันค่อนข้างดี แต่อย่างใด อย่างไรก็ตามฉันมาถึงจุดที่มันแตกต่างจากสิ่งที่ Linux ของฉันผลิตในการส่งออกเปลือก บนหน้า 92 (116 ในตัวแสดง) บทที่ 4.5 การใช้งานเธรด GNU / Linux เริ่มต้นด้วยย่อหน้าที่มีคำสั่งนี้: การติดตั้งเธรด POSIX บน GNU / Linux แตกต่างจากการใช้เธรดในระบบที่คล้ายกับ UNIX อื่น ๆ ในวิธีการที่สำคัญ: บน GNU / Linux เธรดจะถูกใช้เป็นกระบวนการ ดูเหมือนว่าจะเป็นจุดสำคัญและจะแสดงในภายหลังด้วยรหัส C ผลลัพธ์ในหนังสือเล่มนี้คือ: main thread …

4
ทำไมบางครั้งโปรแกรมด้วย fork () บางครั้งก็พิมพ์ผลลัพธ์ออกมาหลาย ๆ ครั้ง?
ในโปรแกรม 1 Hello worldได้รับการพิมพ์เพียงครั้งเดียว แต่เมื่อฉันลบ \nและเรียกใช้ (โปรแกรม 2) ผลลัพธ์จะได้รับการพิมพ์ 8 ครั้ง ใครช่วยอธิบายความสำคัญของ\nที่นี่กับมันได้fork()อย่างไร โปรแกรม 1 #include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> int main() { printf("hello world...\n"); fork(); fork(); fork(); } เอาท์พุท 1: hello world... โปรแกรม 2 #include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> int main() { printf("hello world..."); …
50 c  fork 

6
ระบบของฉันใช้ไลบรารี C เวอร์ชันใด
ฉันจะบอกได้อย่างไรว่าห้องสมุดของฉันใช้ระบบผู้ใช้อะไร เหตุผลที่เป็นไปได้ที่จะต้องการข้อมูลนี้ ได้แก่ : มีแพ็กเกจแหล่งข้อมูลขนาดมหึมาที่ฉันกำลังพิจารณาดาวน์โหลดซึ่งฉันแน่ใจว่าจะทำการตรวจสอบที่เหมาะสมและแสดงรายการเวอร์ชันไลบรารีขั้นต่ำ แต่ฉันควรช่วยตัวเองให้ยุ่งยากโดยการตรวจสอบก่อนว่ามันใช้ได้หรือไม่ ฉันกังวลเกี่ยวกับความเข้ากันได้ของ ABIกับไบนารีของบุคคลที่สามที่ฉันต้องการลองและติดตั้งนอกระบบการจัดการแพ็กเกจของระบบ ฉันมีแพ็กเกจซอร์สซึ่งเอกสารระบุถึงความต้องการไลบรารีเวอร์ชันระบบขั้นต่ำของฉัน แต่กระบวนการบิลด์ไม่ดำเนินการตรวจสอบใด ๆ ฉันกำลังสร้าง cross-compiler ที่กำหนดเป้าหมายไปยังระบบเฉพาะและไม่ต้องการที่จะเสี่ยงต่อปัญหาความเข้ากัน

5
ฉันจะฆ่ากระบวนการทั้งหมดของผู้ใช้โดยใช้ UID ของพวกเขาได้อย่างไร
ฉันต้องการที่จะฆ่ากระบวนการที่กำลังทำงานทั้งหมดของผู้ใช้เฉพาะจากทั้งเชลล์สคริปต์หรือโค้ดเนทีฟบนระบบ Linux ฉันต้องอ่านไดเร็กทอรี / proc แล้วมองหาสิ่งเหล่านี้หรือไม่? ความคิดใด ๆ มีการแม็พแบบไดนามิกของ pids ภายใต้ UID ใน Linux หรือไม่? นี่ไม่ใช่ใน proc หรือ ถ้าไม่เช่นนั้นรายการนี้จะอยู่ที่ไหน? ฉันควรอ่านจากมันไหม? นอกจากนี้รายการแบบคงที่ของ UID ทั้งหมดในระบบเพื่อให้ฉันสามารถตรวจสอบผู้ใช้นี้อยู่แล้วดำเนินการเพื่อฆ่ากระบวนการทั้งหมดที่ทำงานภายใต้มัน
41 c  linux  proc 

6
วิธีการดัมพ์ไฟล์ไบนารีเป็นสตริงตัวอักษร C / C ++?
ฉันมีไฟล์ไบนารีที่ฉันต้องการรวมไว้ในซอร์สโค้ด C ของฉัน (เป็นการชั่วคราวเพื่อการทดสอบ) ดังนั้นฉันต้องการได้รับเนื้อหาไฟล์เป็นสตริง C เช่นนี้: \x01\x02\x03\x04 เป็นไปได้นี้อาจโดยใช้odหรือhexdumpสาธารณูปโภค? ในขณะที่ไม่จำเป็นถ้าสตริงสามารถตัดบรรทัดถัดไปทุก 16 อินพุตไบต์และรวมเครื่องหมายคำพูดคู่ที่จุดเริ่มต้นและจุดสิ้นสุดของแต่ละบรรทัดนั่นจะยิ่งดีกว่า! ฉันทราบว่าสตริงจะมีค่า null ที่ฝังอยู่ ( \x00) ดังนั้นฉันจะต้องระบุความยาวของสตริงในโค้ดเพื่อป้องกันไบต์เหล่านี้จากการยกเลิกสตริงก่อน
39 c  hexdump  xxd 


2
ขนาดสแต็กเริ่มต้นสำหรับ pthreads
ดังที่ฉันเข้าใจขนาดสแต็คเริ่มต้นสำหรับ pthread บน Linux คือ 16K ฉันได้รับผลลัพธ์ที่แปลกในการติดตั้ง Ubuntu แบบ 64 บิตของฉัน $ ulimit -s 8192 นอกจากนี้: pthread_attr_init(&attr); pthread_attr_getstacksize(&attr, &stacksize); printf("Thread stack size = %d bytes \n", stacksize); Prints Thread stack size = 8388608 bytes ฉันค่อนข้างแน่ใจว่าขนาดสแต็กไม่ใช่ "8388608" มีอะไรผิดปกติ?
24 c  multithreading 

3
copy-on-write in fork () จัดการหลาย fork อย่างไร
ตาม Wikipedia (ซึ่งอาจผิด) เมื่อมีการออกการเรียกระบบ fork () สำเนาของหน้าทั้งหมดที่เกี่ยวข้องกับกระบวนการหลักจะถูกสร้างขึ้นโหลดลงในตำแหน่งหน่วยความจำแยกต่างหากโดยระบบปฏิบัติการสำหรับกระบวนการลูก แต่นี่ไม่จำเป็นในบางกรณี พิจารณากรณีที่เมื่อเด็กรัน " exec" ระบบโทร (ที่ใช้ในการเรียกใช้ไฟล์ปฏิบัติการใด ๆ จากภายในโปรแกรม C) หรือออกในเร็ว ๆ fork()นี้หลังจากที่ เมื่อเด็กต้องการเพียงแค่เรียกใช้คำสั่งสำหรับกระบวนการหลักไม่จำเป็นต้องคัดลอกเพจกระบวนการหลักเนื่องจากexecแทนที่พื้นที่ที่อยู่ของกระบวนการที่เรียกใช้งานด้วยคำสั่งที่จะดำเนินการ ในกรณีเช่นนี้จะใช้เทคนิคที่เรียกว่า copy-on-write (COW) ด้วยเทคนิคนี้เมื่อมีการแยกหน้าเพจของกระบวนการหลักจะไม่ถูกคัดลอกสำหรับกระบวนการลูก แต่จะมีการแชร์หน้าระหว่างเด็กและกระบวนการหลักแทน เมื่อใดก็ตามที่กระบวนการ (พาเรนต์หรือชายด์) แก้ไขเพจสำเนาที่แยกต่างหากของเพจนั้นจะถูกสร้างขึ้นสำหรับกระบวนการนั้น (พาเรนต์หรือชายด์) ซึ่งดำเนินการแก้ไข กระบวนการนี้จะใช้เพจที่คัดลอกใหม่แทนที่จะเป็นเพจที่แชร์ในการอ้างอิงในอนาคตทั้งหมด กระบวนการอื่น (กระบวนการที่ไม่ได้แก้ไขเพจที่ใช้ร่วมกัน) ยังคงใช้สำเนาต้นฉบับของหน้าต่อไป (ซึ่งตอนนี้ไม่ได้ถูกแชร์อีกต่อไป) เทคนิคนี้เรียกว่า copy-on-write เนื่องจากหน้าจะถูกคัดลอกเมื่อบางกระบวนการเขียนไป ดูเหมือนว่าเมื่อกระบวนการอย่างใดอย่างหนึ่งพยายามที่จะเขียนไปยังหน้าสำเนาใหม่ของหน้าได้รับการจัดสรรและกำหนดให้กับกระบวนการที่สร้างความผิดหน้า หน้าเดิมได้รับการทำเครื่องหมายว่าสามารถเขียนได้ในภายหลัง คำถามของฉันคือจะเกิดอะไรขึ้นหากการfork()เรียกถูกเรียกหลายครั้งก่อนที่กระบวนการใด ๆ พยายามเขียนลงในเพจที่ใช้ร่วมกัน?
23 linux  c  fork 

2
POSIX รับประกันเส้นทางไปยังยูทิลิตี้มาตรฐานหรือไม่?
จาก C วิธีที่ง่ายที่สุดในการใช้ยูทิลิตี้มาตรฐาน (เช่น ps) และอื่น ๆ คืออะไร? POSIX รับประกันว่ามาตรฐานpsนั้นอยู่ใน/bin/psหรือฉันควรรีเซ็ตตัวแปรสภาพแวดล้อม PATH เป็นสิ่งที่ฉันได้รับconfstr(_CS_PATH, pathbuf, n);จากนั้นเรียกใช้ยูทิลิตีผ่าน PATH-search หรือไม่
22 path  c  posix  exec 

4
ทำไฟล์บันทึก
มีวิธีใดบ้างในการสร้างล็อกไฟล์สำหรับเก็บรักษาข้อมูลบางอย่างใน / var / log / ด้วยความช่วยเหลือของฟังก์ชั่นไลบรารีบางอย่างหรือการเรียกระบบในภาษา c ใน linux และฉันต้องการทราบมาตรฐานที่เราควรทำตามเพื่อเขียนและประมวลผลบันทึก ขอบคุณ
22 linux  logs  c  syslog 

4
หลังจาก fork () เด็กจะเริ่มต้นการดำเนินการที่ใด
ฉันพยายามเรียนรู้การเขียนโปรแกรม UNIX และพบคำถามเกี่ยวกับ fork () ฉันเข้าใจว่า fork () สร้างกระบวนการที่เหมือนกันของกระบวนการที่กำลังทำงานอยู่ แต่มันเริ่มต้นที่ไหน ตัวอย่างเช่นถ้าฉันมีรหัส int main (int argc, char **argv) { int retval; printf ("This is most definitely the parent process\n"); fflush (stdout); retval = fork (); printf ("Which process printed this?\n"); return (EXIT_SUCCESS); } ผลลัพธ์คือ: นี่เป็นกระบวนการสำหรับผู้ปกครองแน่นอนที่สุดกระบวนการ ใดที่พิมพ์ออกมานี้ กระบวนการใดพิมพ์ ฉันคิดว่ามันfork()สร้างกระบวนการเดียวกันดังนั้นตอนแรกฉันก็เลยว่าในโปรแกรมนั้นการfork()โทรจะถูกเรียกซ้ำตลอดไป ฉันเดาว่ากระบวนการใหม่ที่สร้างขึ้นจากการfork()เริ่มต้นหลังจากการfork()โทร? ถ้าฉันเพิ่มรหัสต่อไปนี้เพื่อแยกความแตกต่างระหว่างกระบวนการหลักและลูก if …
22 process  c  fork  api 

7
เป็นไปได้ที่จะหาขนาดของชนิดข้อมูล (int, float, double, …) ในระบบโดยไม่ต้องเขียนโปรแกรม C หรือไม่?
เป็นไปได้ไหมที่จะหาขนาดของชนิดข้อมูล (int, float, double, ... ) บนระบบ Linux โดยไม่ต้องเขียนโปรแกรม C? ผลลัพธ์สำหรับ C จะเหมือนกับ C ++ และภาษาการเขียนโปรแกรมอื่น ๆ ในระบบ Linux เดียวกันหรือไม่
19 c 

5
ฉันจะค้นหาหน่วยความจำรั่วไหลของกระบวนการทำงานได้อย่างไร
มีวิธีฉันสามารถค้นหาหน่วยความจำรั่วไหลของกระบวนการทำงานหรือไม่ ฉันสามารถใช้ Valgrind เพื่อค้นหาการรั่วไหลของหน่วยความจำก่อนเริ่มกระบวนการ ฉันสามารถใช้ GDB เพื่อแนบกับกระบวนการทำงาน ฉันจะดีบักการรั่วไหลของหน่วยความจำของกระบวนการทำงานได้อย่างไร
19 c  gdb  memory-leaks 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.