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

โค้ดแบบพกพาสามารถทำงานได้โดยมีการปรับเปลี่ยนเพียงเล็กน้อยหรือไม่มีเลยในหลายสภาพแวดล้อม แอปพลิเคชันแบบพกพาสามารถเรียกใช้จากไดรฟ์ USB ได้โดยไม่ต้องแก้ไขสภาพแวดล้อมของคอมพิวเตอร์

1
SO_REUSEADDR และ SO_REUSEPORT แตกต่างกันอย่างไร
man pagesและเอกสารโปรแกรมเมอร์หาตัวเลือกซ็อกเก็ตSO_REUSEADDRและSO_REUSEPORTมีความแตกต่างกันสำหรับระบบปฏิบัติการที่แตกต่างกันและมักจะทำให้เกิดความสับสนอย่างมาก SO_REUSEPORTบางระบบปฏิบัติการไม่ได้มีตัวเลือก เว็บเต็มไปด้วยข้อมูลที่ขัดแย้งกันเกี่ยวกับเรื่องนี้และบ่อยครั้งที่คุณสามารถค้นหาข้อมูลที่เป็นจริงสำหรับการใช้งานซ็อกเก็ตเดียวของระบบปฏิบัติการเฉพาะซึ่งอาจไม่ได้กล่าวถึงอย่างชัดเจนในข้อความ แล้วSO_REUSEADDRแตกต่างกันSO_REUSEPORTอย่างไร ระบบที่ไม่มีSO_REUSEPORTข้อ จำกัด มากขึ้น? และสิ่งที่เป็นพฤติกรรมที่คาดหวังถ้าฉันใช้อย่างใดอย่างหนึ่งในระบบปฏิบัติการที่แตกต่างกัน?

12
มีวิธีพกพาในการรับชื่อผู้ใช้ปัจจุบันใน Python หรือไม่?
มีวิธีการพกพาเพื่อรับชื่อผู้ใช้ปัจจุบันใน Python (เช่นที่ทำงานภายใต้ Linux และ Windows อย่างน้อย) มันจะทำงานเช่นos.getuid: >>> os.getuid() 42 >>> os.getusername() 'slartibartfast' ฉัน googled ไปรอบ ๆ และรู้สึกประหลาดใจที่จะไม่หาคำตอบที่ชัดเจน (แม้ว่าบางทีฉันอาจเป็นเพียง googling ไม่ดี) pwdโมดูลให้เป็นวิธีที่ค่อนข้างง่ายที่จะประสบความสำเร็จภายใต้นี้บอกว่าลินุกซ์ แต่มันก็ไม่ได้อยู่บน Windows ผลการค้นหาบางส่วนชี้ให้เห็นว่าการได้รับชื่อผู้ใช้ภายใต้ Windows อาจมีความซับซ้อนในบางสถานการณ์ (เช่นทำงานเป็นบริการของ Windows) แม้ว่าฉันจะยังไม่ได้ยืนยันก็ตาม

8
ทำไม strlen ของ glibc จึงจำเป็นต้องมีความซับซ้อนในการทำงานอย่างรวดเร็ว
ฉันดูstrlenรหัสที่นี่และสงสัยว่าการเพิ่มประสิทธิภาพที่ใช้ในรหัสนั้นจำเป็นจริง ๆ หรือไม่ ตัวอย่างเช่นทำไมบางอย่างจะไม่เหมือนงานต่อไปนี้ดีหรือดีกว่า unsigned long strlen(char s[]) { unsigned long i; for (i = 0; s[i] != '\0'; i++) continue; return i; } รหัสเรียบง่ายกว่าและดีกว่าสำหรับการรวบรวมเพื่อเพิ่มประสิทธิภาพหรือไม่ โค้ดของstrlenหน้าหลังลิงค์มีลักษณะดังนี้: /* Copyright (C) 1991, 1993, 1997, 2000, 2003 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Torbjorn …

4
เหตุใดฉันจึงไม่ #include <bits / stdc ++. h>
ฉันโพสต์คำถามด้วยรหัสของฉันซึ่ง#includeคำสั่งเพียงอย่างเดียวคือ: #include &lt;bits/stdc++.h&gt; ครูของฉันบอกให้ฉันทำสิ่งนี้ แต่ในส่วนความเห็นฉันได้รับแจ้งว่าฉันไม่ควรทำ ทำไม?

9
มีการแทนที่สำหรับ unistd.h สำหรับ Windows (Visual C) หรือไม่
ฉันกำลังย้ายโปรแกรมคอนโซลที่ค่อนข้างง่ายซึ่งเขียนขึ้นสำหรับ Unix ไปยังแพลตฟอร์ม Windows ( Visual C ++ 8.0 ) ไฟล์ต้นฉบับทั้งหมดมี "unistd.h" ซึ่งไม่มีอยู่ การลบออกฉันได้รับการร้องเรียนเกี่ยวกับการพลาดต้นแบบสำหรับ 'srandom', 'random' และ 'getopt' ฉันรู้ว่าฉันสามารถแทนที่ฟังก์ชั่นแบบสุ่มและฉันค่อนข้างมั่นใจว่าฉันสามารถค้นหา / แฮ็กอัพการใช้งาน getopt แต่ฉันแน่ใจว่าคนอื่น ๆ ได้พบกับความท้าทายเดียวกัน คำถามของฉันคือ: มีพอร์ต "unistd.h" กับ Windows หรือไม่ อย่างน้อยหนึ่ง containg ฟังก์ชั่นเหล่านั้นที่มีการใช้งาน Windows พื้นเมือง - ฉันไม่ต้องการท่อหรือฟอร์ก แก้ไข : ฉันรู้ว่าฉันสามารถสร้าง "unistd.h" ของตัวเองซึ่งมีการแทนที่สิ่งที่ฉันต้องการ - โดยเฉพาะในกรณีนี้เนื่องจากเป็นชุดที่ จำกัด แต่เนื่องจากดูเหมือนว่าเป็นปัญหาทั่วไปฉันจึงสงสัยว่ามีบางคนทำงานให้ฟังก์ชั่นย่อยที่ใหญ่กว่านี้อยู่แล้ว การสลับไปใช้คอมไพเลอร์หรือสภาพแวดล้อมที่แตกต่างกันเป็นไปไม่ได้ในที่ทำงาน - ฉันติดอยู่กับ …
165 c++  c  windows  portability  unistd.h 

9
ฉันจะพิมพ์ประเภทเช่น off_t และ size_t ได้อย่างไร
ฉันพยายามที่จะพิมพ์ประเภทเช่นและoff_t size_tตัวยึดตำแหน่งที่ถูกต้องสำหรับprintf() อุปกรณ์พกพาคืออะไร หรือมีวิธีที่แตกต่างอย่างสิ้นเชิงในการพิมพ์ตัวแปรเหล่านั้น?

8
จะวัดเวลาเป็นมิลลิวินาทีโดยใช้ ANSI C ได้อย่างไร?
การใช้ ANSI C เพียงอย่างเดียวมีวิธีใดในการวัดเวลาด้วยความแม่นยำระดับมิลลิวินาทีขึ้นไปหรือไม่? ฉันกำลังเรียกดูเวลา h แต่ฉันพบฟังก์ชันความแม่นยำที่สองเท่านั้น

23
มีอะไรอยู่ในเครื่องมือทางการศึกษาเพื่อแสดงให้เห็นถึงสมมติฐานที่ไม่มีเหตุผลที่ผู้คนตั้งไว้ใน C / C ++
ฉันต้องการเตรียมเครื่องมือทางการศึกษาเล็ก ๆ น้อย ๆ สำหรับ SO ซึ่งจะช่วยให้โปรแกรมเมอร์มือใหม่ (และระดับกลาง) รับรู้และท้าทายสมมติฐานที่ไม่ได้รับการรับรองใน C, C ++ และแพลตฟอร์มของพวกเขา ตัวอย่าง: "จำนวนเต็มพันรอบ" "ทุกคนมี ASCII" "ฉันสามารถจัดเก็บตัวชี้ฟังก์ชันในความว่างเปล่า *" ฉันคิดว่าโปรแกรมทดสอบขนาดเล็กสามารถทำงานบนแพลตฟอร์มต่างๆได้ซึ่งเรียกใช้สมมติฐานที่ "เป็นไปได้" ซึ่งจากประสบการณ์ของเราใน SO มักสร้างขึ้นโดยนักพัฒนากระแสหลักที่ไม่มีประสบการณ์ / กึ่งมีประสบการณ์จำนวนมากและบันทึกวิธีที่พวกเขาทำลายบนเครื่องต่างๆ เป้าหมายของสิ่งนี้ไม่ใช่เพื่อพิสูจน์ว่า "ปลอดภัย" ที่จะทำบางสิ่ง (ซึ่งคงเป็นไปไม่ได้ที่จะทำการทดสอบจะพิสูจน์อะไรก็ได้ถ้ามันแตก) แต่แทนที่จะแสดงให้เห็นว่าแม้แต่คนที่ไม่เข้าใจที่สุดว่าการแสดงออกที่ไม่เด่นชัดที่สุด หยุดทำงานบนเครื่องอื่นหากมีพฤติกรรมที่กำหนดไว้โดยไม่ได้กำหนดหรือการนำไปใช้งาน . เพื่อให้บรรลุสิ่งนี้ฉันอยากจะถามคุณ: ความคิดนี้จะปรับปรุงได้อย่างไร? แบบทดสอบใดที่จะดีและควรมีลักษณะอย่างไร? คุณจะทำการทดสอบบนแพลตฟอร์มที่คุณสามารถทำได้และโพสต์ผลลัพธ์เพื่อที่เราจะได้ฐานข้อมูลของแพลตฟอร์มแตกต่างกันอย่างไรและเหตุใดจึงอนุญาตให้ใช้ความแตกต่างนี้ได้ นี่คือเวอร์ชันปัจจุบันสำหรับของเล่นทดสอบ: #include &lt;stdio.h&gt; #include &lt;limits.h&gt; #include &lt;stdlib.h&gt; #include &lt;stddef.h&gt; int count=0; int total=0; …

8
คำแนะนำเฉพาะระบบปฏิบัติการใน CMAKE: ทำอย่างไร?
ฉันเป็นมือใหม่กับ CMAKE ด้านล่างนี้เป็นไฟล์ cmake แบบธรรมดาซึ่งทำงานได้ดีในหน้าต่างสภาพแวดล้อม mingw ปัญหาชัดเจนกับtarget_link_libraries()ฟังก์ชันของ CMAKE ที่ฉันเชื่อมโยง libwsock32.a ใน windows สิ่งนี้ใช้งานได้และฉันได้รับผลลัพธ์ อย่างไรก็ตามตามที่คาดไว้ใน Linux /usr/bin/ldจะมองหา-lwsock32สิ่งที่ไม่มีใน Linux OS ปัญหาของฉันคือ: ฉันจะสั่งให้ CMAKE หลีกเลี่ยงการเชื่อมโยงไลบรารี wsock32 ใน Linux OS ได้อย่างไร ??? ความช่วยเหลือใด ๆ จะได้รับการชื่นชมอย่างมาก ไฟล์ Simple CMake ของฉัน: PROJECT(biourl) set (${PROJECT_NAME}_headers ./BioSocketAddress.h ./BioSocketBase.h ./BioSocketBuffer.h ./BioSocketCommon.h ./BioSocketListener.h ./BioSocketPrivate.h ./BioSocketStream.h ./BioUrl.h BioDatabase.h ) set (${PROJECT_NAME}_sources …
116 c++  linux  cmake  mingw  portability 

9
ฉันจะเรียกใช้ฟังก์ชัน C ++ แบบพกพาที่ใช้ถ่าน ** บนบางแพลตฟอร์มและ const char ** บนแพลตฟอร์มอื่น ๆ ได้อย่างไร
บนเครื่อง Linux (และ OS X) ของฉันiconv()ฟังก์ชั่นมีต้นแบบนี้: size_t iconv (iconv_t, char **inbuf... ในขณะที่ FreeBSD จะมีลักษณะดังนี้: size_t iconv (iconv_t, const char **inbuf... ฉันต้องการให้โค้ด C ++ ของฉันสร้างบนทั้งสองแพลตฟอร์ม ด้วยคอมไพเลอร์ C การส่งผ่านchar**สำหรับconst char**พารามิเตอร์ (หรือในทางกลับกัน) มักจะส่งเสียงเตือนเท่านั้น อย่างไรก็ตามใน C ++ เป็นข้อผิดพลาดร้ายแรง ดังนั้นถ้าฉันผ่าน a char**มันจะไม่รวบรวมบน BSD และถ้าฉันส่งผ่านconst char**มันจะไม่คอมไพล์บน Linux / OS X ฉันจะเขียนโค้ดที่คอมไพล์ทั้งสองอย่างโดยไม่ต้องพยายามตรวจจับแพลตฟอร์มได้อย่างไร แนวคิด (ล้มเหลว) อย่างหนึ่งที่ฉันมีคือการจัดเตรียมต้นแบบท้องถิ่นที่แทนที่ส่วนหัวที่ให้มา: void myfunc(void) …
91 c++  const  portability 

4
ฟีเจอร์ทดลองของ C ++ สมัยใหม่เชื่อถือได้สำหรับโครงการระยะยาวหรือไม่?
ฉันมีโปรเจ็กต์ที่ใช้ C ++ 11/14 อยู่ในขณะนี้ แต่มันต้องการบางอย่างเช่นstd::filesystemซึ่งมีเฉพาะใน C ++ 17 เท่านั้นดังนั้นฉันจึงไม่มีโอกาสใช้มันในตอนนี้ อย่างไรก็ตามฉันเห็นว่ามีอยู่ในคอมไพเลอร์ปัจจุบันของฉันในชื่อstd::experimental::filesystemไฟล์. เป็นความคิดที่ดีไหมที่จะใช้ฟีเจอร์ทดลองโดยสมมติว่าในอนาคตฉันสามารถเพิ่มสิ่งต่างๆเช่น: #ifdef CXX17 //if this is C++17 std::filesystem::something ...; #else std::experimental::filesystem::something ...; #endif ข้อกังวลของฉันคือ: 1. รับประกันหรือไม่ว่าคอมไพเลอร์ที่เข้ากันได้ทั้งหมดมีคุณสมบัติการทดลองเหมือนกัน? 2. ฟีเจอร์ทดลองมีแนวโน้มที่จะเกิดการเปลี่ยนแปลงครั้งใหญ่ที่ทำให้ไม่น่าเชื่อถือหรือไม่? อาจจะมีอะไรให้สงสัยอีก เหตุใดฉันจึงควรหรือไม่ควรใช้ ฉันงงงวยกับโครงการใหม่และไม่รู้ว่าจะตัดสินใจอะไร

3
“ ความผันผวน” รับประกันอะไรในรหัส C แบบพกพาสำหรับระบบมัลติคอร์หรือไม่?
หลังจากที่กำลังมองหาที่พวง ของ อื่น ๆ คำถาม และ พวกเขา ตอบฉันได้รับความประทับใจที่ไม่มีข้อตกลงอย่างกว้างขวางในสิ่งที่ "ผันผวน" คำหลักใน C หมายความว่า แม้มาตรฐานของตัวเองดูเหมือนจะไม่เพียงพอที่ชัดเจนสำหรับทุกคนที่จะเห็นด้วยกับสิ่งที่มันหมายถึง ท่ามกลางปัญหาอื่น ๆ : ดูเหมือนว่าจะให้การรับประกันที่แตกต่างกันขึ้นอยู่กับฮาร์ดแวร์ของคุณและขึ้นอยู่กับคอมไพเลอร์ของคุณ มันมีผลต่อการปรับให้เหมาะสมของคอมไพเลอร์ แต่ไม่ใช่การปรับให้เหมาะสมของฮาร์ดแวร์ดังนั้นในโปรเซสเซอร์ขั้นสูงที่ทำการปรับแต่งให้เหมาะสมนั้นไม่ชัดเจนว่าคอมไพเลอร์สามารถป้องกันการปรับให้เหมาะสมที่คุณต้องการป้องกันได้หรือไม่ (คอมไพเลอร์บางตัวสร้างคำแนะนำเพื่อป้องกันการปรับแต่งฮาร์ดแวร์บางอย่างในบางระบบ แต่สิ่งนี้ดูเหมือนจะไม่ได้มาตรฐานในทางใดทางหนึ่ง) เพื่อสรุปปัญหาปรากฏขึ้น (หลังจากอ่านมาก) ว่า "volatile" รับประกันสิ่งที่ต้องการ: ค่าจะอ่าน / เขียนไม่เพียงจาก / ไปยังการลงทะเบียน แต่อย่างน้อยกับแคช L1 หลักในลำดับเดียวกันกับที่ การอ่าน / เขียนจะปรากฏขึ้นในรหัส แต่สิ่งนี้ดูไร้ประโยชน์เนื่องจากการอ่าน / เขียนจาก / ไปยังการลงทะเบียนนั้นเพียงพอแล้วในเธรดเดียวกันในขณะที่การประสานงานกับแคช L1 ไม่รับประกันอะไรเพิ่มเติมเกี่ยวกับการประสานงานกับเธรดอื่น ๆ ฉันนึกภาพไม่ออกเลยว่ามันจะสำคัญเมื่อต้องซิงค์เพียงกับแคช L1 ใช้ 1 การใช้ …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.