├── README.md ├── build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug ├── .qmake.stash ├── Makefile ├── ex1 ├── main.o ├── moc_predefs.h ├── moc_widget.cpp ├── moc_widget.o ├── moc_widget1.cpp ├── moc_widget1.o ├── moc_widget2.cpp ├── moc_widget2.o ├── ui_widget.h ├── ui_widget1.h ├── ui_widget2.h ├── widget.o ├── widget1.o └── widget2.o ├── copy.c ├── ex1-1 ├── copy.c └── ex1-1.md ├── ex1-2 ├── ex1.pro ├── ex1.pro.user ├── ex1.pro.user.d8a3ae6.4.8-pre1 ├── main.cpp ├── widget.cpp ├── widget.h ├── widget.ui ├── widget1.cpp ├── widget1.h ├── widget1.ui ├── widget2.cpp ├── widget2.h └── widget2.ui ├── ex2 ├── a.out ├── ex2.c ├── ex2.md ├── source └── source.txt ├── ex3 ├── .mydev.ko.cmd ├── .mydev.mod.o.cmd ├── .mydev.o.cmd ├── .tmp_versions │ └── mydev.mod ├── Makefile ├── Module.symvers ├── modules.order ├── mydev.c ├── mydev.ko ├── mydev.mod.c ├── mydev.mod.o └── mydev.o ├── ex4 ├── build-taskmanager-Desktop_Qt_5_12_1_GCC_64bit-Debug │ ├── .qmake.stash │ ├── Makefile │ ├── main.o │ ├── moc_predefs.h │ ├── moc_taskmanager.cpp │ ├── moc_taskmanager.o │ ├── taskmanager │ ├── taskmanager.o │ └── ui_taskmanager.h └── taskmanager │ ├── main.cpp │ ├── taskmanager.cpp │ ├── taskmanager.cpp.autosave │ ├── taskmanager.h │ ├── taskmanager.pro │ ├── taskmanager.pro.user │ ├── taskmanager.pro.user.d8a3ae6.4.8-pre1 │ └── taskmanager.ui └── image ├── Selection_022.png ├── Selection_023.png ├── Selection_024.png ├── Selection_025.png ├── Selection_026.png ├── Selection_027.png ├── Selection_028.png ├── Selection_029.png ├── Selection_030.png ├── dmesg.png ├── os1.png ├── os4.png ├── sys_h_1.png ├── ui.png ├── ypang@Ubuntu-ypang_ ~-OsCourseDesign_036.png └── ypang@Ubuntu-ypang_ ~-compile-linux-4.20.10_001.png /README.md: -------------------------------------------------------------------------------- 1 | # 华中科技大学-操作原理课程设计 2 | 完成日期:2019/2/11 3 | ## 任务1.熟悉和理解Linux编程环境 4 | ### 1-1 文件拷贝 5 | 编写一个C程序,用read、write等系统调用实现文件拷贝功能。命令形式:copy <源文件名> <目标文件名>。[详细信息](https://github.com/isypang/OsCourseDesign/blob/master/ex1-1/ex1-1.md) 6 | ### 1-2 进程并发 7 | 编写一个C程序,使用图形编程库 (QT/GTK)分窗口显示三个并发进程的运行(一个窗口实时显示当前系统时间,一个窗口循环显示0到9,一个窗口做1到1000的累加求和,刷新周期均为1秒)。 8 | 9 | ## 任务2.掌握添加系统调用的方法 10 | 采用编译内核的方法,添加一个新的系统调用,实现文件拷贝功能。编写一个应用程序,测试新加的系统调用。 11 | 12 | ## 任务3.掌握添加设备驱动程序的方法 13 | 采用模块方法,添加一个新的字符设备驱动程序,实现打开/关闭、读/写等基本操作。编写一个应用程序,测试添加的驱动程序。 14 | 15 | ## 任务4.理解和分析/proc文件 16 | 通过读取proc文件系统,获取系统各种信息,并以比较容易理解的方式显示出来。具体包括:主机名、系统启动时间、系统运行时间、版本号、所有进程信息、CPU类型、CPU的使用率、内存使用率……----参照WINDOWS的任务管理器,实现其中的部分功能。 17 | -------------------------------------------------------------------------------- /build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug/.qmake.stash: -------------------------------------------------------------------------------- 1 | QMAKE_CXX.QT_COMPILER_STDCXX = 201402L 2 | QMAKE_CXX.QMAKE_GCC_MAJOR_VERSION = 7 3 | QMAKE_CXX.QMAKE_GCC_MINOR_VERSION = 3 4 | QMAKE_CXX.QMAKE_GCC_PATCH_VERSION = 0 5 | QMAKE_CXX.COMPILER_MACROS = \ 6 | QT_COMPILER_STDCXX \ 7 | QMAKE_GCC_MAJOR_VERSION \ 8 | QMAKE_GCC_MINOR_VERSION \ 9 | QMAKE_GCC_PATCH_VERSION 10 | QMAKE_CXX.INCDIRS = \ 11 | /usr/include/c++/7 \ 12 | /usr/include/x86_64-linux-gnu/c++/7 \ 13 | /usr/include/c++/7/backward \ 14 | /usr/lib/gcc/x86_64-linux-gnu/7/include \ 15 | /usr/local/include \ 16 | /usr/lib/gcc/x86_64-linux-gnu/7/include-fixed \ 17 | /usr/include/x86_64-linux-gnu \ 18 | /usr/include 19 | QMAKE_CXX.LIBDIRS = \ 20 | /usr/lib/gcc/x86_64-linux-gnu/7 \ 21 | /usr/lib/x86_64-linux-gnu \ 22 | /usr/lib \ 23 | /lib/x86_64-linux-gnu \ 24 | /lib 25 | -------------------------------------------------------------------------------- /build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug/ex1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug/ex1 -------------------------------------------------------------------------------- /build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug/main.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug/main.o -------------------------------------------------------------------------------- /build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug/moc_predefs.h: -------------------------------------------------------------------------------- 1 | #define __SSP_STRONG__ 3 2 | #define __DBL_MIN_EXP__ (-1021) 3 | #define __FLT32X_MAX_EXP__ 1024 4 | #define __cpp_attributes 200809 5 | #define __UINT_LEAST16_MAX__ 0xffff 6 | #define __ATOMIC_ACQUIRE 2 7 | #define __FLT128_MAX_10_EXP__ 4932 8 | #define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F 9 | #define __GCC_IEC_559_COMPLEX 2 10 | #define __UINT_LEAST8_TYPE__ unsigned char 11 | #define __SIZEOF_FLOAT80__ 16 12 | #define __INTMAX_C(c) c ## L 13 | #define __CHAR_BIT__ 8 14 | #define __UINT8_MAX__ 0xff 15 | #define __WINT_MAX__ 0xffffffffU 16 | #define __FLT32_MIN_EXP__ (-125) 17 | #define __cpp_static_assert 200410 18 | #define __ORDER_LITTLE_ENDIAN__ 1234 19 | #define __SIZE_MAX__ 0xffffffffffffffffUL 20 | #define __WCHAR_MAX__ 0x7fffffff 21 | #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 22 | #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 23 | #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 24 | #define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L) 25 | #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 26 | #define __GCC_ATOMIC_CHAR_LOCK_FREE 2 27 | #define __GCC_IEC_559 2 28 | #define __FLT32X_DECIMAL_DIG__ 17 29 | #define __FLT_EVAL_METHOD__ 0 30 | #define __unix__ 1 31 | #define __cpp_binary_literals 201304 32 | #define __FLT64_DECIMAL_DIG__ 17 33 | #define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 34 | #define __x86_64 1 35 | #define __cpp_variadic_templates 200704 36 | #define __UINT_FAST64_MAX__ 0xffffffffffffffffUL 37 | #define __SIG_ATOMIC_TYPE__ int 38 | #define __DBL_MIN_10_EXP__ (-307) 39 | #define __FINITE_MATH_ONLY__ 0 40 | #define __GNUC_PATCHLEVEL__ 0 41 | #define __FLT32_HAS_DENORM__ 1 42 | #define __UINT_FAST8_MAX__ 0xff 43 | #define __has_include(STR) __has_include__(STR) 44 | #define __DEC64_MAX_EXP__ 385 45 | #define __INT8_C(c) c 46 | #define __INT_LEAST8_WIDTH__ 8 47 | #define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL 48 | #define __SHRT_MAX__ 0x7fff 49 | #define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L 50 | #define __FLT64X_MAX_10_EXP__ 4932 51 | #define __UINT_LEAST8_MAX__ 0xff 52 | #define __GCC_ATOMIC_BOOL_LOCK_FREE 2 53 | #define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 54 | #define __UINTMAX_TYPE__ long unsigned int 55 | #define __linux 1 56 | #define __DEC32_EPSILON__ 1E-6DF 57 | #define __FLT_EVAL_METHOD_TS_18661_3__ 0 58 | #define __unix 1 59 | #define __UINT32_MAX__ 0xffffffffU 60 | #define __GXX_EXPERIMENTAL_CXX0X__ 1 61 | #define __LDBL_MAX_EXP__ 16384 62 | #define __FLT128_MIN_EXP__ (-16381) 63 | #define __WINT_MIN__ 0U 64 | #define __linux__ 1 65 | #define __FLT128_MIN_10_EXP__ (-4931) 66 | #define __INT_LEAST16_WIDTH__ 16 67 | #define __SCHAR_MAX__ 0x7f 68 | #define __FLT128_MANT_DIG__ 113 69 | #define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) 70 | #define __INT64_C(c) c ## L 71 | #define __DBL_DIG__ 15 72 | #define __GCC_ATOMIC_POINTER_LOCK_FREE 2 73 | #define __FLT64X_MANT_DIG__ 64 74 | #define __SIZEOF_INT__ 4 75 | #define __SIZEOF_POINTER__ 8 76 | #define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 77 | #define __USER_LABEL_PREFIX__ 78 | #define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x 79 | #define __STDC_HOSTED__ 1 80 | #define __LDBL_HAS_INFINITY__ 1 81 | #define __FLT32_DIG__ 6 82 | #define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F 83 | #define __GXX_WEAK__ 1 84 | #define __SHRT_WIDTH__ 16 85 | #define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L 86 | #define __DEC32_MAX__ 9.999999E96DF 87 | #define __cpp_threadsafe_static_init 200806 88 | #define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x 89 | #define __FLT32X_HAS_INFINITY__ 1 90 | #define __INT32_MAX__ 0x7fffffff 91 | #define __INT_WIDTH__ 32 92 | #define __SIZEOF_LONG__ 8 93 | #define __STDC_IEC_559__ 1 94 | #define __STDC_ISO_10646__ 201706L 95 | #define __UINT16_C(c) c 96 | #define __PTRDIFF_WIDTH__ 64 97 | #define __DECIMAL_DIG__ 21 98 | #define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 99 | #define __gnu_linux__ 1 100 | #define __INTMAX_WIDTH__ 64 101 | #define __FLT64_MIN_EXP__ (-1021) 102 | #define __has_include_next(STR) __has_include_next__(STR) 103 | #define __FLT64X_MIN_10_EXP__ (-4931) 104 | #define __LDBL_HAS_QUIET_NAN__ 1 105 | #define __FLT64_MANT_DIG__ 53 106 | #define __GNUC__ 7 107 | #define __GXX_RTTI 1 108 | #define __pie__ 2 109 | #define __MMX__ 1 110 | #define __cpp_delegating_constructors 200604 111 | #define __FLT_HAS_DENORM__ 1 112 | #define __SIZEOF_LONG_DOUBLE__ 16 113 | #define __BIGGEST_ALIGNMENT__ 16 114 | #define __STDC_UTF_16__ 1 115 | #define __FLT64_MAX_10_EXP__ 308 116 | #define __FLT32_HAS_INFINITY__ 1 117 | #define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L) 118 | #define __cpp_raw_strings 200710 119 | #define __INT_FAST32_MAX__ 0x7fffffffffffffffL 120 | #define __DBL_HAS_INFINITY__ 1 121 | #define __INT64_MAX__ 0x7fffffffffffffffL 122 | #define __DEC32_MIN_EXP__ (-94) 123 | #define __INTPTR_WIDTH__ 64 124 | #define __FLT32X_HAS_DENORM__ 1 125 | #define __INT_FAST16_TYPE__ long int 126 | #define __LDBL_HAS_DENORM__ 1 127 | #define __cplusplus 201103L 128 | #define __cpp_ref_qualifiers 200710 129 | #define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL 130 | #define __INT_LEAST32_MAX__ 0x7fffffff 131 | #define __DEC32_MIN__ 1E-95DF 132 | #define __DEPRECATED 1 133 | #define __cpp_rvalue_references 200610 134 | #define __DBL_MAX_EXP__ 1024 135 | #define __WCHAR_WIDTH__ 32 136 | #define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 137 | #define __DEC128_EPSILON__ 1E-33DL 138 | #define __SSE2_MATH__ 1 139 | #define __ATOMIC_HLE_RELEASE 131072 140 | #define __PTRDIFF_MAX__ 0x7fffffffffffffffL 141 | #define __amd64 1 142 | #define __STDC_NO_THREADS__ 1 143 | #define __ATOMIC_HLE_ACQUIRE 65536 144 | #define __FLT32_HAS_QUIET_NAN__ 1 145 | #define __GNUG__ 7 146 | #define __LONG_LONG_MAX__ 0x7fffffffffffffffLL 147 | #define __SIZEOF_SIZE_T__ 8 148 | #define __cpp_rvalue_reference 200610 149 | #define __cpp_nsdmi 200809 150 | #define __FLT64X_MIN_EXP__ (-16381) 151 | #define __SIZEOF_WINT_T__ 4 152 | #define __LONG_LONG_WIDTH__ 64 153 | #define __cpp_initializer_lists 200806 154 | #define __FLT32_MAX_EXP__ 128 155 | #define __cpp_hex_float 201603 156 | #define __GCC_HAVE_DWARF2_CFI_ASM 1 157 | #define __GXX_ABI_VERSION 1011 158 | #define __FLT128_HAS_INFINITY__ 1 159 | #define __FLT_MIN_EXP__ (-125) 160 | #define __cpp_lambdas 200907 161 | #define __FLT64X_HAS_QUIET_NAN__ 1 162 | #define __INT_FAST64_TYPE__ long int 163 | #define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 164 | #define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L) 165 | #define __PIE__ 2 166 | #define __LP64__ 1 167 | #define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x 168 | #define __DECIMAL_BID_FORMAT__ 1 169 | #define __FLT64_MIN_10_EXP__ (-307) 170 | #define __FLT64X_DECIMAL_DIG__ 21 171 | #define __DEC128_MIN__ 1E-6143DL 172 | #define __REGISTER_PREFIX__ 173 | #define __UINT16_MAX__ 0xffff 174 | #define __DBL_HAS_DENORM__ 1 175 | #define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 176 | #define __UINT8_TYPE__ unsigned char 177 | #define __NO_INLINE__ 1 178 | #define __FLT_MANT_DIG__ 24 179 | #define __LDBL_DECIMAL_DIG__ 21 180 | #define __VERSION__ "7.3.0" 181 | #define __UINT64_C(c) c ## UL 182 | #define __cpp_unicode_characters 200704 183 | #define _STDC_PREDEF_H 1 184 | #define __GCC_ATOMIC_INT_LOCK_FREE 2 185 | #define __FLT128_MAX_EXP__ 16384 186 | #define __FLT32_MANT_DIG__ 24 187 | #define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ 188 | #define __STDC_IEC_559_COMPLEX__ 1 189 | #define __FLT128_HAS_DENORM__ 1 190 | #define __FLT128_DIG__ 33 191 | #define __SCHAR_WIDTH__ 8 192 | #define __INT32_C(c) c 193 | #define __DEC64_EPSILON__ 1E-15DD 194 | #define __ORDER_PDP_ENDIAN__ 3412 195 | #define __DEC128_MIN_EXP__ (-6142) 196 | #define __FLT32_MAX_10_EXP__ 38 197 | #define __INT_FAST32_TYPE__ long int 198 | #define __UINT_LEAST16_TYPE__ short unsigned int 199 | #define __FLT64X_HAS_INFINITY__ 1 200 | #define unix 1 201 | #define __INT16_MAX__ 0x7fff 202 | #define __cpp_rtti 199711 203 | #define __SIZE_TYPE__ long unsigned int 204 | #define __UINT64_MAX__ 0xffffffffffffffffUL 205 | #define __FLT64X_DIG__ 18 206 | #define __INT8_TYPE__ signed char 207 | #define __ELF__ 1 208 | #define __GCC_ASM_FLAG_OUTPUTS__ 1 209 | #define __FLT_RADIX__ 2 210 | #define __INT_LEAST16_TYPE__ short int 211 | #define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L 212 | #define __UINTMAX_C(c) c ## UL 213 | #define __GLIBCXX_BITSIZE_INT_N_0 128 214 | #define __k8 1 215 | #define __SIG_ATOMIC_MAX__ 0x7fffffff 216 | #define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 217 | #define __SIZEOF_PTRDIFF_T__ 8 218 | #define __FLT32X_MANT_DIG__ 53 219 | #define __x86_64__ 1 220 | #define __FLT32X_MIN_EXP__ (-1021) 221 | #define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF 222 | #define __INT_FAST16_MAX__ 0x7fffffffffffffffL 223 | #define __FLT64_DIG__ 15 224 | #define __UINT_FAST32_MAX__ 0xffffffffffffffffUL 225 | #define __UINT_LEAST64_TYPE__ long unsigned int 226 | #define __FLT_HAS_QUIET_NAN__ 1 227 | #define __FLT_MAX_10_EXP__ 38 228 | #define __LONG_MAX__ 0x7fffffffffffffffL 229 | #define __FLT64X_HAS_DENORM__ 1 230 | #define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL 231 | #define __FLT_HAS_INFINITY__ 1 232 | #define __cpp_unicode_literals 200710 233 | #define __UINT_FAST16_TYPE__ long unsigned int 234 | #define __DEC64_MAX__ 9.999999999999999E384DD 235 | #define __INT_FAST32_WIDTH__ 64 236 | #define __CHAR16_TYPE__ short unsigned int 237 | #define __PRAGMA_REDEFINE_EXTNAME 1 238 | #define __SIZE_WIDTH__ 64 239 | #define __SEG_FS 1 240 | #define __INT_LEAST16_MAX__ 0x7fff 241 | #define __DEC64_MANT_DIG__ 16 242 | #define __UINT_LEAST32_MAX__ 0xffffffffU 243 | #define __SEG_GS 1 244 | #define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 245 | #define __GCC_ATOMIC_LONG_LOCK_FREE 2 246 | #define __SIG_ATOMIC_WIDTH__ 32 247 | #define __INT_LEAST64_TYPE__ long int 248 | #define __INT16_TYPE__ short int 249 | #define __INT_LEAST8_TYPE__ signed char 250 | #define __DEC32_MAX_EXP__ 97 251 | #define __INT_FAST8_MAX__ 0x7f 252 | #define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 253 | #define __INTPTR_MAX__ 0x7fffffffffffffffL 254 | #define linux 1 255 | #define __cpp_range_based_for 200907 256 | #define __FLT64_HAS_QUIET_NAN__ 1 257 | #define __FLT32_MIN_10_EXP__ (-37) 258 | #define __SSE2__ 1 259 | #define __EXCEPTIONS 1 260 | #define __LDBL_MANT_DIG__ 64 261 | #define __DBL_HAS_QUIET_NAN__ 1 262 | #define __FLT64_HAS_INFINITY__ 1 263 | #define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x 264 | #define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) 265 | #define __code_model_small__ 1 266 | #define __k8__ 1 267 | #define __INTPTR_TYPE__ long int 268 | #define __UINT16_TYPE__ short unsigned int 269 | #define __WCHAR_TYPE__ int 270 | #define __SIZEOF_FLOAT__ 4 271 | #define __pic__ 2 272 | #define __UINTPTR_MAX__ 0xffffffffffffffffUL 273 | #define __INT_FAST64_WIDTH__ 64 274 | #define __DEC64_MIN_EXP__ (-382) 275 | #define __cpp_decltype 200707 276 | #define __FLT32_DECIMAL_DIG__ 9 277 | #define __INT_FAST64_MAX__ 0x7fffffffffffffffL 278 | #define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 279 | #define __FLT_DIG__ 6 280 | #define __FLT64X_MAX_EXP__ 16384 281 | #define __UINT_FAST64_TYPE__ long unsigned int 282 | #define __INT_MAX__ 0x7fffffff 283 | #define __amd64__ 1 284 | #define __INT64_TYPE__ long int 285 | #define __FLT_MAX_EXP__ 128 286 | #define __ORDER_BIG_ENDIAN__ 4321 287 | #define __DBL_MANT_DIG__ 53 288 | #define __cpp_inheriting_constructors 201511 289 | #define __SIZEOF_FLOAT128__ 16 290 | #define __INT_LEAST64_MAX__ 0x7fffffffffffffffL 291 | #define __DEC64_MIN__ 1E-383DD 292 | #define __WINT_TYPE__ unsigned int 293 | #define __UINT_LEAST32_TYPE__ unsigned int 294 | #define __SIZEOF_SHORT__ 2 295 | #define __SSE__ 1 296 | #define __LDBL_MIN_EXP__ (-16381) 297 | #define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 298 | #define __WINT_WIDTH__ 32 299 | #define __INT_LEAST8_MAX__ 0x7f 300 | #define __FLT32X_MAX_10_EXP__ 308 301 | #define __SIZEOF_INT128__ 16 302 | #define __LDBL_MAX_10_EXP__ 4932 303 | #define __ATOMIC_RELAXED 0 304 | #define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L) 305 | #define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 306 | #define _LP64 1 307 | #define __UINT8_C(c) c 308 | #define __FLT64_MAX_EXP__ 1024 309 | #define __INT_LEAST32_TYPE__ int 310 | #define __SIZEOF_WCHAR_T__ 4 311 | #define __FLT128_HAS_QUIET_NAN__ 1 312 | #define __INT_FAST8_TYPE__ signed char 313 | #define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x 314 | #define __GNUC_STDC_INLINE__ 1 315 | #define __FLT64_HAS_DENORM__ 1 316 | #define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 317 | #define __DBL_DECIMAL_DIG__ 17 318 | #define __STDC_UTF_32__ 1 319 | #define __INT_FAST8_WIDTH__ 8 320 | #define __FXSR__ 1 321 | #define __DEC_EVAL_METHOD__ 2 322 | #define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x 323 | #define __cpp_runtime_arrays 198712 324 | #define __UINT64_TYPE__ long unsigned int 325 | #define __UINT32_C(c) c ## U 326 | #define __INTMAX_MAX__ 0x7fffffffffffffffL 327 | #define __cpp_alias_templates 200704 328 | #define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ 329 | #define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F 330 | #define __INT8_MAX__ 0x7f 331 | #define __LONG_WIDTH__ 64 332 | #define __PIC__ 2 333 | #define __UINT_FAST32_TYPE__ long unsigned int 334 | #define __CHAR32_TYPE__ unsigned int 335 | #define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F 336 | #define __cpp_constexpr 200704 337 | #define __INT32_TYPE__ int 338 | #define __SIZEOF_DOUBLE__ 8 339 | #define __cpp_exceptions 199711 340 | #define __FLT_MIN_10_EXP__ (-37) 341 | #define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 342 | #define __INT_LEAST32_WIDTH__ 32 343 | #define __INTMAX_TYPE__ long int 344 | #define __DEC128_MAX_EXP__ 6145 345 | #define __FLT32X_HAS_QUIET_NAN__ 1 346 | #define __ATOMIC_CONSUME 1 347 | #define __GNUC_MINOR__ 3 348 | #define __GLIBCXX_TYPE_INT_N_0 __int128 349 | #define __INT_FAST16_WIDTH__ 64 350 | #define __UINTMAX_MAX__ 0xffffffffffffffffUL 351 | #define __DEC32_MANT_DIG__ 7 352 | #define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x 353 | #define __DBL_MAX_10_EXP__ 308 354 | #define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L 355 | #define __INT16_C(c) c 356 | #define __STDC__ 1 357 | #define __FLT32X_DIG__ 15 358 | #define __PTRDIFF_TYPE__ long int 359 | #define __ATOMIC_SEQ_CST 5 360 | #define __UINT32_TYPE__ unsigned int 361 | #define __FLT32X_MIN_10_EXP__ (-307) 362 | #define __UINTPTR_TYPE__ long unsigned int 363 | #define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD 364 | #define __DEC128_MANT_DIG__ 34 365 | #define __LDBL_MIN_10_EXP__ (-4931) 366 | #define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 367 | #define __SSE_MATH__ 1 368 | #define __SIZEOF_LONG_LONG__ 8 369 | #define __cpp_user_defined_literals 200809 370 | #define __FLT128_DECIMAL_DIG__ 36 371 | #define __GCC_ATOMIC_LLONG_LOCK_FREE 2 372 | #define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x 373 | #define __LDBL_DIG__ 18 374 | #define __FLT_DECIMAL_DIG__ 9 375 | #define __UINT_FAST16_MAX__ 0xffffffffffffffffUL 376 | #define __GCC_ATOMIC_SHORT_LOCK_FREE 2 377 | #define __INT_LEAST64_WIDTH__ 64 378 | #define __UINT_FAST8_TYPE__ unsigned char 379 | #define _GNU_SOURCE 1 380 | #define __ATOMIC_ACQ_REL 4 381 | #define __ATOMIC_RELEASE 3 382 | -------------------------------------------------------------------------------- /build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug/moc_widget.cpp: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | ** Meta object code from reading C++ file 'widget.h' 3 | ** 4 | ** Created by: The Qt Meta Object Compiler version 67 (Qt 5.12.1) 5 | ** 6 | ** WARNING! All changes made in this file will be lost! 7 | *****************************************************************************/ 8 | 9 | #include "../ex1-2/widget.h" 10 | #include 11 | #include 12 | #if !defined(Q_MOC_OUTPUT_REVISION) 13 | #error "The header file 'widget.h' doesn't include ." 14 | #elif Q_MOC_OUTPUT_REVISION != 67 15 | #error "This file was generated using the moc from 5.12.1. It" 16 | #error "cannot be used with the include files from this version of Qt." 17 | #error "(The moc has changed too much.)" 18 | #endif 19 | 20 | QT_BEGIN_MOC_NAMESPACE 21 | QT_WARNING_PUSH 22 | QT_WARNING_DISABLE_DEPRECATED 23 | struct qt_meta_stringdata_Widget_t { 24 | QByteArrayData data[3]; 25 | char stringdata0[15]; 26 | }; 27 | #define QT_MOC_LITERAL(idx, ofs, len) \ 28 | Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ 29 | qptrdiff(offsetof(qt_meta_stringdata_Widget_t, stringdata0) + ofs \ 30 | - idx * sizeof(QByteArrayData)) \ 31 | ) 32 | static const qt_meta_stringdata_Widget_t qt_meta_stringdata_Widget = { 33 | { 34 | QT_MOC_LITERAL(0, 0, 6), // "Widget" 35 | QT_MOC_LITERAL(1, 7, 6), // "Update" 36 | QT_MOC_LITERAL(2, 14, 0) // "" 37 | 38 | }, 39 | "Widget\0Update\0" 40 | }; 41 | #undef QT_MOC_LITERAL 42 | 43 | static const uint qt_meta_data_Widget[] = { 44 | 45 | // content: 46 | 8, // revision 47 | 0, // classname 48 | 0, 0, // classinfo 49 | 1, 14, // methods 50 | 0, 0, // properties 51 | 0, 0, // enums/sets 52 | 0, 0, // constructors 53 | 0, // flags 54 | 0, // signalCount 55 | 56 | // slots: name, argc, parameters, tag, flags 57 | 1, 0, 19, 2, 0x0a /* Public */, 58 | 59 | // slots: parameters 60 | QMetaType::Void, 61 | 62 | 0 // eod 63 | }; 64 | 65 | void Widget::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) 66 | { 67 | if (_c == QMetaObject::InvokeMetaMethod) { 68 | auto *_t = static_cast(_o); 69 | Q_UNUSED(_t) 70 | switch (_id) { 71 | case 0: _t->Update(); break; 72 | default: ; 73 | } 74 | } 75 | Q_UNUSED(_a); 76 | } 77 | 78 | QT_INIT_METAOBJECT const QMetaObject Widget::staticMetaObject = { { 79 | &QWidget::staticMetaObject, 80 | qt_meta_stringdata_Widget.data, 81 | qt_meta_data_Widget, 82 | qt_static_metacall, 83 | nullptr, 84 | nullptr 85 | } }; 86 | 87 | 88 | const QMetaObject *Widget::metaObject() const 89 | { 90 | return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; 91 | } 92 | 93 | void *Widget::qt_metacast(const char *_clname) 94 | { 95 | if (!_clname) return nullptr; 96 | if (!strcmp(_clname, qt_meta_stringdata_Widget.stringdata0)) 97 | return static_cast(this); 98 | return QWidget::qt_metacast(_clname); 99 | } 100 | 101 | int Widget::qt_metacall(QMetaObject::Call _c, int _id, void **_a) 102 | { 103 | _id = QWidget::qt_metacall(_c, _id, _a); 104 | if (_id < 0) 105 | return _id; 106 | if (_c == QMetaObject::InvokeMetaMethod) { 107 | if (_id < 1) 108 | qt_static_metacall(this, _c, _id, _a); 109 | _id -= 1; 110 | } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { 111 | if (_id < 1) 112 | *reinterpret_cast(_a[0]) = -1; 113 | _id -= 1; 114 | } 115 | return _id; 116 | } 117 | QT_WARNING_POP 118 | QT_END_MOC_NAMESPACE 119 | -------------------------------------------------------------------------------- /build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug/moc_widget.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug/moc_widget.o -------------------------------------------------------------------------------- /build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug/moc_widget1.cpp: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | ** Meta object code from reading C++ file 'widget1.h' 3 | ** 4 | ** Created by: The Qt Meta Object Compiler version 67 (Qt 5.12.1) 5 | ** 6 | ** WARNING! All changes made in this file will be lost! 7 | *****************************************************************************/ 8 | 9 | #include "../ex1-2/widget1.h" 10 | #include 11 | #include 12 | #if !defined(Q_MOC_OUTPUT_REVISION) 13 | #error "The header file 'widget1.h' doesn't include ." 14 | #elif Q_MOC_OUTPUT_REVISION != 67 15 | #error "This file was generated using the moc from 5.12.1. It" 16 | #error "cannot be used with the include files from this version of Qt." 17 | #error "(The moc has changed too much.)" 18 | #endif 19 | 20 | QT_BEGIN_MOC_NAMESPACE 21 | QT_WARNING_PUSH 22 | QT_WARNING_DISABLE_DEPRECATED 23 | struct qt_meta_stringdata_widget1_t { 24 | QByteArrayData data[3]; 25 | char stringdata0[16]; 26 | }; 27 | #define QT_MOC_LITERAL(idx, ofs, len) \ 28 | Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ 29 | qptrdiff(offsetof(qt_meta_stringdata_widget1_t, stringdata0) + ofs \ 30 | - idx * sizeof(QByteArrayData)) \ 31 | ) 32 | static const qt_meta_stringdata_widget1_t qt_meta_stringdata_widget1 = { 33 | { 34 | QT_MOC_LITERAL(0, 0, 7), // "widget1" 35 | QT_MOC_LITERAL(1, 8, 6), // "Update" 36 | QT_MOC_LITERAL(2, 15, 0) // "" 37 | 38 | }, 39 | "widget1\0Update\0" 40 | }; 41 | #undef QT_MOC_LITERAL 42 | 43 | static const uint qt_meta_data_widget1[] = { 44 | 45 | // content: 46 | 8, // revision 47 | 0, // classname 48 | 0, 0, // classinfo 49 | 1, 14, // methods 50 | 0, 0, // properties 51 | 0, 0, // enums/sets 52 | 0, 0, // constructors 53 | 0, // flags 54 | 0, // signalCount 55 | 56 | // slots: name, argc, parameters, tag, flags 57 | 1, 0, 19, 2, 0x0a /* Public */, 58 | 59 | // slots: parameters 60 | QMetaType::Void, 61 | 62 | 0 // eod 63 | }; 64 | 65 | void widget1::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) 66 | { 67 | if (_c == QMetaObject::InvokeMetaMethod) { 68 | auto *_t = static_cast(_o); 69 | Q_UNUSED(_t) 70 | switch (_id) { 71 | case 0: _t->Update(); break; 72 | default: ; 73 | } 74 | } 75 | Q_UNUSED(_a); 76 | } 77 | 78 | QT_INIT_METAOBJECT const QMetaObject widget1::staticMetaObject = { { 79 | &QWidget::staticMetaObject, 80 | qt_meta_stringdata_widget1.data, 81 | qt_meta_data_widget1, 82 | qt_static_metacall, 83 | nullptr, 84 | nullptr 85 | } }; 86 | 87 | 88 | const QMetaObject *widget1::metaObject() const 89 | { 90 | return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; 91 | } 92 | 93 | void *widget1::qt_metacast(const char *_clname) 94 | { 95 | if (!_clname) return nullptr; 96 | if (!strcmp(_clname, qt_meta_stringdata_widget1.stringdata0)) 97 | return static_cast(this); 98 | return QWidget::qt_metacast(_clname); 99 | } 100 | 101 | int widget1::qt_metacall(QMetaObject::Call _c, int _id, void **_a) 102 | { 103 | _id = QWidget::qt_metacall(_c, _id, _a); 104 | if (_id < 0) 105 | return _id; 106 | if (_c == QMetaObject::InvokeMetaMethod) { 107 | if (_id < 1) 108 | qt_static_metacall(this, _c, _id, _a); 109 | _id -= 1; 110 | } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { 111 | if (_id < 1) 112 | *reinterpret_cast(_a[0]) = -1; 113 | _id -= 1; 114 | } 115 | return _id; 116 | } 117 | QT_WARNING_POP 118 | QT_END_MOC_NAMESPACE 119 | -------------------------------------------------------------------------------- /build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug/moc_widget1.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug/moc_widget1.o -------------------------------------------------------------------------------- /build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug/moc_widget2.cpp: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | ** Meta object code from reading C++ file 'widget2.h' 3 | ** 4 | ** Created by: The Qt Meta Object Compiler version 67 (Qt 5.12.1) 5 | ** 6 | ** WARNING! All changes made in this file will be lost! 7 | *****************************************************************************/ 8 | 9 | #include "../ex1-2/widget2.h" 10 | #include 11 | #include 12 | #if !defined(Q_MOC_OUTPUT_REVISION) 13 | #error "The header file 'widget2.h' doesn't include ." 14 | #elif Q_MOC_OUTPUT_REVISION != 67 15 | #error "This file was generated using the moc from 5.12.1. It" 16 | #error "cannot be used with the include files from this version of Qt." 17 | #error "(The moc has changed too much.)" 18 | #endif 19 | 20 | QT_BEGIN_MOC_NAMESPACE 21 | QT_WARNING_PUSH 22 | QT_WARNING_DISABLE_DEPRECATED 23 | struct qt_meta_stringdata_widget2_t { 24 | QByteArrayData data[3]; 25 | char stringdata0[16]; 26 | }; 27 | #define QT_MOC_LITERAL(idx, ofs, len) \ 28 | Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ 29 | qptrdiff(offsetof(qt_meta_stringdata_widget2_t, stringdata0) + ofs \ 30 | - idx * sizeof(QByteArrayData)) \ 31 | ) 32 | static const qt_meta_stringdata_widget2_t qt_meta_stringdata_widget2 = { 33 | { 34 | QT_MOC_LITERAL(0, 0, 7), // "widget2" 35 | QT_MOC_LITERAL(1, 8, 6), // "Update" 36 | QT_MOC_LITERAL(2, 15, 0) // "" 37 | 38 | }, 39 | "widget2\0Update\0" 40 | }; 41 | #undef QT_MOC_LITERAL 42 | 43 | static const uint qt_meta_data_widget2[] = { 44 | 45 | // content: 46 | 8, // revision 47 | 0, // classname 48 | 0, 0, // classinfo 49 | 1, 14, // methods 50 | 0, 0, // properties 51 | 0, 0, // enums/sets 52 | 0, 0, // constructors 53 | 0, // flags 54 | 0, // signalCount 55 | 56 | // slots: name, argc, parameters, tag, flags 57 | 1, 0, 19, 2, 0x0a /* Public */, 58 | 59 | // slots: parameters 60 | QMetaType::Void, 61 | 62 | 0 // eod 63 | }; 64 | 65 | void widget2::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) 66 | { 67 | if (_c == QMetaObject::InvokeMetaMethod) { 68 | auto *_t = static_cast(_o); 69 | Q_UNUSED(_t) 70 | switch (_id) { 71 | case 0: _t->Update(); break; 72 | default: ; 73 | } 74 | } 75 | Q_UNUSED(_a); 76 | } 77 | 78 | QT_INIT_METAOBJECT const QMetaObject widget2::staticMetaObject = { { 79 | &QWidget::staticMetaObject, 80 | qt_meta_stringdata_widget2.data, 81 | qt_meta_data_widget2, 82 | qt_static_metacall, 83 | nullptr, 84 | nullptr 85 | } }; 86 | 87 | 88 | const QMetaObject *widget2::metaObject() const 89 | { 90 | return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; 91 | } 92 | 93 | void *widget2::qt_metacast(const char *_clname) 94 | { 95 | if (!_clname) return nullptr; 96 | if (!strcmp(_clname, qt_meta_stringdata_widget2.stringdata0)) 97 | return static_cast(this); 98 | return QWidget::qt_metacast(_clname); 99 | } 100 | 101 | int widget2::qt_metacall(QMetaObject::Call _c, int _id, void **_a) 102 | { 103 | _id = QWidget::qt_metacall(_c, _id, _a); 104 | if (_id < 0) 105 | return _id; 106 | if (_c == QMetaObject::InvokeMetaMethod) { 107 | if (_id < 1) 108 | qt_static_metacall(this, _c, _id, _a); 109 | _id -= 1; 110 | } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { 111 | if (_id < 1) 112 | *reinterpret_cast(_a[0]) = -1; 113 | _id -= 1; 114 | } 115 | return _id; 116 | } 117 | QT_WARNING_POP 118 | QT_END_MOC_NAMESPACE 119 | -------------------------------------------------------------------------------- /build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug/moc_widget2.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug/moc_widget2.o -------------------------------------------------------------------------------- /build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug/ui_widget.h: -------------------------------------------------------------------------------- 1 | /******************************************************************************** 2 | ** Form generated from reading UI file 'widget.ui' 3 | ** 4 | ** Created by: Qt User Interface Compiler version 5.12.1 5 | ** 6 | ** WARNING! All changes made in this file will be lost when recompiling UI file! 7 | ********************************************************************************/ 8 | 9 | #ifndef UI_WIDGET_H 10 | #define UI_WIDGET_H 11 | 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | 20 | QT_BEGIN_NAMESPACE 21 | 22 | class Ui_Widget 23 | { 24 | public: 25 | QWidget *layoutWidget; 26 | QVBoxLayout *verticalLayout; 27 | QHBoxLayout *horizontalLayout; 28 | QLabel *label; 29 | QSpacerItem *horizontalSpacer; 30 | QLabel *label_2; 31 | QSpacerItem *verticalSpacer; 32 | QHBoxLayout *horizontalLayout_2; 33 | QLabel *label_3; 34 | QSpacerItem *horizontalSpacer_2; 35 | QLabel *label_4; 36 | 37 | void setupUi(QWidget *Widget) 38 | { 39 | if (Widget->objectName().isEmpty()) 40 | Widget->setObjectName(QString::fromUtf8("Widget")); 41 | Widget->resize(285, 126); 42 | layoutWidget = new QWidget(Widget); 43 | layoutWidget->setObjectName(QString::fromUtf8("layoutWidget")); 44 | layoutWidget->setGeometry(QRect(40, 20, 209, 89)); 45 | verticalLayout = new QVBoxLayout(layoutWidget); 46 | verticalLayout->setSpacing(6); 47 | verticalLayout->setContentsMargins(11, 11, 11, 11); 48 | verticalLayout->setObjectName(QString::fromUtf8("verticalLayout")); 49 | verticalLayout->setContentsMargins(0, 0, 0, 0); 50 | horizontalLayout = new QHBoxLayout(); 51 | horizontalLayout->setSpacing(6); 52 | horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout")); 53 | label = new QLabel(layoutWidget); 54 | label->setObjectName(QString::fromUtf8("label")); 55 | 56 | horizontalLayout->addWidget(label); 57 | 58 | horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); 59 | 60 | horizontalLayout->addItem(horizontalSpacer); 61 | 62 | label_2 = new QLabel(layoutWidget); 63 | label_2->setObjectName(QString::fromUtf8("label_2")); 64 | 65 | horizontalLayout->addWidget(label_2); 66 | 67 | 68 | verticalLayout->addLayout(horizontalLayout); 69 | 70 | verticalSpacer = new QSpacerItem(20, 28, QSizePolicy::Minimum, QSizePolicy::Expanding); 71 | 72 | verticalLayout->addItem(verticalSpacer); 73 | 74 | horizontalLayout_2 = new QHBoxLayout(); 75 | horizontalLayout_2->setSpacing(6); 76 | horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2")); 77 | label_3 = new QLabel(layoutWidget); 78 | label_3->setObjectName(QString::fromUtf8("label_3")); 79 | 80 | horizontalLayout_2->addWidget(label_3); 81 | 82 | horizontalSpacer_2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); 83 | 84 | horizontalLayout_2->addItem(horizontalSpacer_2); 85 | 86 | label_4 = new QLabel(layoutWidget); 87 | label_4->setObjectName(QString::fromUtf8("label_4")); 88 | 89 | horizontalLayout_2->addWidget(label_4); 90 | 91 | 92 | verticalLayout->addLayout(horizontalLayout_2); 93 | 94 | 95 | retranslateUi(Widget); 96 | 97 | QMetaObject::connectSlotsByName(Widget); 98 | } // setupUi 99 | 100 | void retranslateUi(QWidget *Widget) 101 | { 102 | Widget->setWindowTitle(QApplication::translate("Widget", "Widget", nullptr)); 103 | label->setText(QApplication::translate("Widget", "\345\275\223\345\211\215\350\277\233\347\250\213pid:", nullptr)); 104 | label_2->setText(QApplication::translate("Widget", "TextLabel", nullptr)); 105 | label_3->setText(QApplication::translate("Widget", "\345\275\223\345\211\215\346\227\266\351\227\264:", nullptr)); 106 | label_4->setText(QApplication::translate("Widget", "TextLabel", nullptr)); 107 | } // retranslateUi 108 | 109 | }; 110 | 111 | namespace Ui { 112 | class Widget: public Ui_Widget {}; 113 | } // namespace Ui 114 | 115 | QT_END_NAMESPACE 116 | 117 | #endif // UI_WIDGET_H 118 | -------------------------------------------------------------------------------- /build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug/ui_widget1.h: -------------------------------------------------------------------------------- 1 | /******************************************************************************** 2 | ** Form generated from reading UI file 'widget1.ui' 3 | ** 4 | ** Created by: Qt User Interface Compiler version 5.12.1 5 | ** 6 | ** WARNING! All changes made in this file will be lost when recompiling UI file! 7 | ********************************************************************************/ 8 | 9 | #ifndef UI_WIDGET1_H 10 | #define UI_WIDGET1_H 11 | 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | 20 | QT_BEGIN_NAMESPACE 21 | 22 | class Ui_widget1 23 | { 24 | public: 25 | QWidget *layoutWidget; 26 | QVBoxLayout *verticalLayout; 27 | QHBoxLayout *horizontalLayout; 28 | QLabel *label; 29 | QSpacerItem *horizontalSpacer; 30 | QLabel *label_2; 31 | QSpacerItem *verticalSpacer; 32 | QHBoxLayout *horizontalLayout_2; 33 | QLabel *label_3; 34 | QSpacerItem *horizontalSpacer_2; 35 | QLabel *label_4; 36 | 37 | void setupUi(QWidget *widget1) 38 | { 39 | if (widget1->objectName().isEmpty()) 40 | widget1->setObjectName(QString::fromUtf8("widget1")); 41 | widget1->resize(285, 126); 42 | layoutWidget = new QWidget(widget1); 43 | layoutWidget->setObjectName(QString::fromUtf8("layoutWidget")); 44 | layoutWidget->setGeometry(QRect(40, 20, 209, 89)); 45 | verticalLayout = new QVBoxLayout(layoutWidget); 46 | verticalLayout->setSpacing(6); 47 | verticalLayout->setContentsMargins(11, 11, 11, 11); 48 | verticalLayout->setObjectName(QString::fromUtf8("verticalLayout")); 49 | verticalLayout->setContentsMargins(0, 0, 0, 0); 50 | horizontalLayout = new QHBoxLayout(); 51 | horizontalLayout->setSpacing(6); 52 | horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout")); 53 | label = new QLabel(layoutWidget); 54 | label->setObjectName(QString::fromUtf8("label")); 55 | 56 | horizontalLayout->addWidget(label); 57 | 58 | horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); 59 | 60 | horizontalLayout->addItem(horizontalSpacer); 61 | 62 | label_2 = new QLabel(layoutWidget); 63 | label_2->setObjectName(QString::fromUtf8("label_2")); 64 | 65 | horizontalLayout->addWidget(label_2); 66 | 67 | 68 | verticalLayout->addLayout(horizontalLayout); 69 | 70 | verticalSpacer = new QSpacerItem(20, 28, QSizePolicy::Minimum, QSizePolicy::Expanding); 71 | 72 | verticalLayout->addItem(verticalSpacer); 73 | 74 | horizontalLayout_2 = new QHBoxLayout(); 75 | horizontalLayout_2->setSpacing(6); 76 | horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2")); 77 | label_3 = new QLabel(layoutWidget); 78 | label_3->setObjectName(QString::fromUtf8("label_3")); 79 | 80 | horizontalLayout_2->addWidget(label_3); 81 | 82 | horizontalSpacer_2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); 83 | 84 | horizontalLayout_2->addItem(horizontalSpacer_2); 85 | 86 | label_4 = new QLabel(layoutWidget); 87 | label_4->setObjectName(QString::fromUtf8("label_4")); 88 | 89 | horizontalLayout_2->addWidget(label_4); 90 | 91 | 92 | verticalLayout->addLayout(horizontalLayout_2); 93 | 94 | 95 | retranslateUi(widget1); 96 | 97 | QMetaObject::connectSlotsByName(widget1); 98 | } // setupUi 99 | 100 | void retranslateUi(QWidget *widget1) 101 | { 102 | widget1->setWindowTitle(QApplication::translate("widget1", "Widget", nullptr)); 103 | label->setText(QApplication::translate("widget1", "\345\275\223\345\211\215\350\277\233\347\250\213pid:", nullptr)); 104 | label_2->setText(QApplication::translate("widget1", "TextLabel", nullptr)); 105 | label_3->setText(QApplication::translate("widget1", "0-9\345\276\252\347\216\257\346\230\276\347\244\272:", nullptr)); 106 | label_4->setText(QApplication::translate("widget1", "TextLabel", nullptr)); 107 | } // retranslateUi 108 | 109 | }; 110 | 111 | namespace Ui { 112 | class widget1: public Ui_widget1 {}; 113 | } // namespace Ui 114 | 115 | QT_END_NAMESPACE 116 | 117 | #endif // UI_WIDGET1_H 118 | -------------------------------------------------------------------------------- /build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug/ui_widget2.h: -------------------------------------------------------------------------------- 1 | /******************************************************************************** 2 | ** Form generated from reading UI file 'widget2.ui' 3 | ** 4 | ** Created by: Qt User Interface Compiler version 5.12.1 5 | ** 6 | ** WARNING! All changes made in this file will be lost when recompiling UI file! 7 | ********************************************************************************/ 8 | 9 | #ifndef UI_WIDGET2_H 10 | #define UI_WIDGET2_H 11 | 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | 20 | QT_BEGIN_NAMESPACE 21 | 22 | class Ui_widget2 23 | { 24 | public: 25 | QWidget *widget; 26 | QVBoxLayout *verticalLayout; 27 | QHBoxLayout *horizontalLayout; 28 | QLabel *label; 29 | QSpacerItem *horizontalSpacer; 30 | QLabel *label_2; 31 | QHBoxLayout *horizontalLayout_3; 32 | QLabel *label_5; 33 | QSpacerItem *horizontalSpacer_3; 34 | QLabel *label_6; 35 | QHBoxLayout *horizontalLayout_2; 36 | QLabel *label_3; 37 | QSpacerItem *horizontalSpacer_2; 38 | QLabel *label_4; 39 | 40 | void setupUi(QWidget *widget2) 41 | { 42 | if (widget2->objectName().isEmpty()) 43 | widget2->setObjectName(QString::fromUtf8("widget2")); 44 | widget2->resize(285, 125); 45 | widget = new QWidget(widget2); 46 | widget->setObjectName(QString::fromUtf8("widget")); 47 | widget->setGeometry(QRect(30, 20, 234, 89)); 48 | verticalLayout = new QVBoxLayout(widget); 49 | verticalLayout->setSpacing(6); 50 | verticalLayout->setContentsMargins(11, 11, 11, 11); 51 | verticalLayout->setObjectName(QString::fromUtf8("verticalLayout")); 52 | verticalLayout->setContentsMargins(0, 0, 0, 0); 53 | horizontalLayout = new QHBoxLayout(); 54 | horizontalLayout->setSpacing(6); 55 | horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout")); 56 | label = new QLabel(widget); 57 | label->setObjectName(QString::fromUtf8("label")); 58 | 59 | horizontalLayout->addWidget(label); 60 | 61 | horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); 62 | 63 | horizontalLayout->addItem(horizontalSpacer); 64 | 65 | label_2 = new QLabel(widget); 66 | label_2->setObjectName(QString::fromUtf8("label_2")); 67 | 68 | horizontalLayout->addWidget(label_2); 69 | 70 | 71 | verticalLayout->addLayout(horizontalLayout); 72 | 73 | horizontalLayout_3 = new QHBoxLayout(); 74 | horizontalLayout_3->setSpacing(6); 75 | horizontalLayout_3->setObjectName(QString::fromUtf8("horizontalLayout_3")); 76 | label_5 = new QLabel(widget); 77 | label_5->setObjectName(QString::fromUtf8("label_5")); 78 | 79 | horizontalLayout_3->addWidget(label_5); 80 | 81 | horizontalSpacer_3 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); 82 | 83 | horizontalLayout_3->addItem(horizontalSpacer_3); 84 | 85 | label_6 = new QLabel(widget); 86 | label_6->setObjectName(QString::fromUtf8("label_6")); 87 | 88 | horizontalLayout_3->addWidget(label_6); 89 | 90 | 91 | verticalLayout->addLayout(horizontalLayout_3); 92 | 93 | horizontalLayout_2 = new QHBoxLayout(); 94 | horizontalLayout_2->setSpacing(6); 95 | horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2")); 96 | label_3 = new QLabel(widget); 97 | label_3->setObjectName(QString::fromUtf8("label_3")); 98 | 99 | horizontalLayout_2->addWidget(label_3); 100 | 101 | horizontalSpacer_2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); 102 | 103 | horizontalLayout_2->addItem(horizontalSpacer_2); 104 | 105 | label_4 = new QLabel(widget); 106 | label_4->setObjectName(QString::fromUtf8("label_4")); 107 | 108 | horizontalLayout_2->addWidget(label_4); 109 | 110 | 111 | verticalLayout->addLayout(horizontalLayout_2); 112 | 113 | 114 | retranslateUi(widget2); 115 | 116 | QMetaObject::connectSlotsByName(widget2); 117 | } // setupUi 118 | 119 | void retranslateUi(QWidget *widget2) 120 | { 121 | widget2->setWindowTitle(QApplication::translate("widget2", "Widget", nullptr)); 122 | label->setText(QApplication::translate("widget2", "\345\275\223\345\211\215\350\277\233\347\250\213pid:", nullptr)); 123 | label_2->setText(QApplication::translate("widget2", "TextLabel", nullptr)); 124 | label_5->setText(QApplication::translate("widget2", "\345\275\223\345\211\215\347\264\257\345\212\240\346\225\260:", nullptr)); 125 | label_6->setText(QApplication::translate("widget2", "TextLabel", nullptr)); 126 | label_3->setText(QApplication::translate("widget2", "1-1000\347\264\257\345\212\240\345\222\214:", nullptr)); 127 | label_4->setText(QApplication::translate("widget2", "TextLabel", nullptr)); 128 | } // retranslateUi 129 | 130 | }; 131 | 132 | namespace Ui { 133 | class widget2: public Ui_widget2 {}; 134 | } // namespace Ui 135 | 136 | QT_END_NAMESPACE 137 | 138 | #endif // UI_WIDGET2_H 139 | -------------------------------------------------------------------------------- /build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug/widget.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug/widget.o -------------------------------------------------------------------------------- /build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug/widget1.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug/widget1.o -------------------------------------------------------------------------------- /build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug/widget2.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug/widget2.o -------------------------------------------------------------------------------- /copy.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | int main(int argc, char *argv[]){ 5 | FILE *src, *des; 6 | if(argc == 3){ //命令行传入源文件和目的文件地址 7 | if((src = fopen(argv[1], "rb")) == NULL){ 8 | printf("src error: 源文件无法打开或不存在\n"); 9 | return 0; 10 | } 11 | if((des = fopen(argv[2], "wb")) == NULL){ 12 | printf("des error: 不合法的目的文件路径\n"); 13 | return 0; 14 | } 15 | } 16 | else if(argc == 1){ //命令行为传入参数,程序内输入 17 | char tmp[128]; 18 | scanf("%s", tmp); 19 | if((src = fopen(tmp, "rb")) == NULL){ 20 | printf("src error: 源文件无法打开或不存在\n"); 21 | return 0; 22 | } 23 | scanf("%s", tmp); 24 | if((des = fopen(tmp, "wb")) == NULL){ 25 | printf("des error: 不合法的目的文件路径\n"); 26 | return 0; 27 | } 28 | } 29 | else{//参数不合法 30 | printf("parameter error: 不合法的参数\n"); 31 | return 0; 32 | } 33 | 34 | char buf[32]; 35 | while(!feof(src)){ // 拷贝文件 36 | fread(buf, 1, 32, src); 37 | fwrite(buf, 1, 32, des); 38 | } 39 | 40 | return 0; 41 | } -------------------------------------------------------------------------------- /ex1-1/copy.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | int main(int argc, char *argv[]){ 5 | FILE *src, *des; 6 | if(argc == 3){ //命令行传入源文件和目的文件地址 7 | if((src = fopen(argv[1], "rb")) == NULL){ 8 | printf("src error: 源文件无法打开或不存在\n"); 9 | return 0; 10 | } 11 | if((des = fopen(argv[2], "wb")) == NULL){ 12 | printf("des error: 不合法的目的文件路径\n"); 13 | return 0; 14 | } 15 | } 16 | else if(argc == 1){ //命令行为传入参数,程序内输入 17 | char tmp[128]; 18 | scanf("%s", tmp); 19 | if((src = fopen(tmp, "rb")) == NULL){ 20 | printf("src error: 源文件无法打开或不存在\n"); 21 | return 0; 22 | } 23 | scanf("%s", tmp); 24 | if((des = fopen(tmp, "wb")) == NULL){ 25 | printf("des error: 不合法的目的文件路径\n"); 26 | return 0; 27 | } 28 | } 29 | else{//参数不合法 30 | printf("parameter error: 不合法的参数\n"); 31 | return 0; 32 | } 33 | 34 | char buf[32]; 35 | while(!feof(src)){ // 拷贝文件 36 | fread(buf, 1, 32, src); 37 | fwrite(buf, 1, 32, des); 38 | } 39 | 40 | return 0; 41 | } -------------------------------------------------------------------------------- /ex1-1/ex1-1.md: -------------------------------------------------------------------------------- 1 | # 通过系统调用实现文件拷贝 2 | 这里使用fread和fwrite的文件读写来实现文件拷贝。核心代码如下: 3 | ```c 4 | char buf[32]; 5 | while(!feof(src)){ // 拷贝文件 6 | fread(buf, 1, 32, src); 7 | fwrite(buf, 1, 32, des); 8 | } 9 | ``` 10 |
由于任务要求调用形式:copy <源文件名> <目标文件名>,需要获取命令行参数,main函数需要写成带命令行参数的形式: 11 | ```c 12 | int main(int argc, char *argv[]){} 13 | ``` 14 |
若符合任务要求的调用形式:copy <源文件名> <目标文件名>, 则main函数会接受到3个参数。第一个参数是隐藏的,即当前程序路径,不需要显示输入。第二个参数是源文件路径。第三个是目的文件路径。判断文件是否可以打开后,报错或开始文件拷贝。 15 | ```c 16 | if(argc == 3){ //命令行传入源文件和目的文件地址 17 | if((src = fopen(argv[1], "rb")) == NULL){ 18 | printf("src error: 源文件无法打开或不存在\n"); 19 | return 0; 20 | } 21 | if((des = fopen(argv[2], "wb")) == NULL){ 22 | printf("des error: 不合法的目的文件路径\n"); 23 | return 0; 24 | } 25 | } 26 | ``` 27 |
若仅输入程序名,则main函数只接收到一个参数,即当前程序路径。这个参数忽略即可,在这个任务中没什么用。但要知道有这个参数,因此其判断条件是argc==1。由于没有获取源文件和目的文件路径,需要在程序内输入其路径。 28 | ```c 29 | else if(argc == 1){ //命令行为传入参数,程序内输入 30 | char tmp[128]; 31 | scanf("%s", tmp); 32 | if((src = fopen(tmp, "rb")) == NULL){ 33 | printf("src error: 源文件无法打开或不存在\n"); 34 | return 0; 35 | } 36 | scanf("%s", tmp); 37 | if((des = fopen(tmp, "wb")) == NULL){ 38 | printf("des error: 不合法的目的文件路径\n"); 39 | return 0; 40 | } 41 | } 42 | ``` 43 | 44 | -------------------------------------------------------------------------------- /ex1-2/ex1.pro: -------------------------------------------------------------------------------- 1 | #------------------------------------------------- 2 | # 3 | # Project created by QtCreator 2019-02-09T20:33:15 4 | # 5 | #------------------------------------------------- 6 | 7 | QT += core gui widgets 8 | 9 | TARGET = ex1 10 | TEMPLATE = app 11 | 12 | # The following define makes your compiler emit warnings if you use 13 | # any feature of Qt which has been marked as deprecated (the exact warnings 14 | # depend on your compiler). Please consult the documentation of the 15 | # deprecated API in order to know how to port your code away from it. 16 | DEFINES += QT_DEPRECATED_WARNINGS 17 | 18 | # You can also make your code fail to compile if you use deprecated APIs. 19 | # In order to do so, uncomment the following line. 20 | # You can also select to disable deprecated APIs only up to a certain version of Qt. 21 | #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 22 | 23 | CONFIG += c++11 24 | 25 | SOURCES += \ 26 | main.cpp \ 27 | widget.cpp \ 28 | widget1.cpp \ 29 | widget2.cpp 30 | 31 | HEADERS += \ 32 | widget.h \ 33 | widget1.h \ 34 | widget2.h 35 | 36 | FORMS += \ 37 | widget.ui \ 38 | widget1.ui \ 39 | widget2.ui 40 | 41 | # Default rules for deployment. 42 | qnx: target.path = /tmp/$${TARGET}/bin 43 | else: unix:!android: target.path = /opt/$${TARGET}/bin 44 | !isEmpty(target.path): INSTALLS += target 45 | -------------------------------------------------------------------------------- /ex1-2/ex1.pro.user: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | EnvironmentId 7 | {f62a4353-8f54-451e-bc70-247463f9d9d9} 8 | 9 | 10 | ProjectExplorer.Project.ActiveTarget 11 | 0 12 | 13 | 14 | ProjectExplorer.Project.EditorSettings 15 | 16 | true 17 | false 18 | true 19 | 20 | Cpp 21 | 22 | CppGlobal 23 | 24 | 25 | 26 | QmlJS 27 | 28 | QmlJSGlobal 29 | 30 | 31 | 2 32 | UTF-8 33 | false 34 | 4 35 | false 36 | 80 37 | true 38 | true 39 | 1 40 | true 41 | false 42 | 0 43 | true 44 | true 45 | 0 46 | 8 47 | true 48 | 1 49 | true 50 | true 51 | true 52 | false 53 | 54 | 55 | 56 | ProjectExplorer.Project.PluginSettings 57 | 58 | 59 | true 60 | 61 | 62 | 63 | ProjectExplorer.Project.Target.0 64 | 65 | Desktop Qt 5.12.1 GCC 64bit 66 | Desktop Qt 5.12.1 GCC 64bit 67 | qt.qt5.5121.gcc_64_kit 68 | 0 69 | 0 70 | 0 71 | 72 | /home/eric142857/OsCourseDesign/build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug 73 | 74 | 75 | true 76 | qmake 77 | 78 | QtProjectManager.QMakeBuildStep 79 | true 80 | 81 | false 82 | false 83 | false 84 | 85 | 86 | true 87 | Make 88 | 89 | Qt4ProjectManager.MakeStep 90 | 91 | false 92 | 93 | 94 | false 95 | 96 | 2 97 | Build 98 | 99 | ProjectExplorer.BuildSteps.Build 100 | 101 | 102 | 103 | true 104 | Make 105 | 106 | Qt4ProjectManager.MakeStep 107 | 108 | true 109 | clean 110 | 111 | false 112 | 113 | 1 114 | Clean 115 | 116 | ProjectExplorer.BuildSteps.Clean 117 | 118 | 2 119 | false 120 | 121 | Debug 122 | Debug 123 | Qt4ProjectManager.Qt4BuildConfiguration 124 | 2 125 | true 126 | 127 | 128 | /home/eric142857/OsCourseDesign/build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Release 129 | 130 | 131 | true 132 | qmake 133 | 134 | QtProjectManager.QMakeBuildStep 135 | false 136 | 137 | false 138 | false 139 | true 140 | 141 | 142 | true 143 | Make 144 | 145 | Qt4ProjectManager.MakeStep 146 | 147 | false 148 | 149 | 150 | false 151 | 152 | 2 153 | Build 154 | 155 | ProjectExplorer.BuildSteps.Build 156 | 157 | 158 | 159 | true 160 | Make 161 | 162 | Qt4ProjectManager.MakeStep 163 | 164 | true 165 | clean 166 | 167 | false 168 | 169 | 1 170 | Clean 171 | 172 | ProjectExplorer.BuildSteps.Clean 173 | 174 | 2 175 | false 176 | 177 | Release 178 | Release 179 | Qt4ProjectManager.Qt4BuildConfiguration 180 | 0 181 | true 182 | 183 | 184 | /home/eric142857/OsCourseDesign/build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Profile 185 | 186 | 187 | true 188 | qmake 189 | 190 | QtProjectManager.QMakeBuildStep 191 | true 192 | 193 | false 194 | true 195 | true 196 | 197 | 198 | true 199 | Make 200 | 201 | Qt4ProjectManager.MakeStep 202 | 203 | false 204 | 205 | 206 | false 207 | 208 | 2 209 | Build 210 | 211 | ProjectExplorer.BuildSteps.Build 212 | 213 | 214 | 215 | true 216 | Make 217 | 218 | Qt4ProjectManager.MakeStep 219 | 220 | true 221 | clean 222 | 223 | false 224 | 225 | 1 226 | Clean 227 | 228 | ProjectExplorer.BuildSteps.Clean 229 | 230 | 2 231 | false 232 | 233 | Profile 234 | Profile 235 | Qt4ProjectManager.Qt4BuildConfiguration 236 | 0 237 | true 238 | 239 | 3 240 | 241 | 242 | 0 243 | Deploy 244 | 245 | ProjectExplorer.BuildSteps.Deploy 246 | 247 | 1 248 | Deploy Configuration 249 | 250 | ProjectExplorer.DefaultDeployConfiguration 251 | 252 | 1 253 | 254 | 255 | false 256 | false 257 | 1000 258 | 259 | true 260 | 261 | false 262 | false 263 | false 264 | false 265 | true 266 | 0.01 267 | 10 268 | true 269 | 1 270 | 25 271 | 272 | 1 273 | true 274 | false 275 | true 276 | valgrind 277 | 278 | 0 279 | 1 280 | 2 281 | 3 282 | 4 283 | 5 284 | 6 285 | 7 286 | 8 287 | 9 288 | 10 289 | 11 290 | 12 291 | 13 292 | 14 293 | 294 | 2 295 | 296 | ex1 297 | 298 | Qt4ProjectManager.Qt4RunConfiguration:/home/eric142857/OsCourseDesign/ex1-2/ex1.pro 299 | ex1.pro 300 | 301 | 3768 302 | false 303 | true 304 | true 305 | false 306 | false 307 | true 308 | 309 | /home/eric142857/OsCourseDesign/build-ex1-Desktop_Qt_5_12_1_GCC_64bit-Debug 310 | 311 | 1 312 | 313 | 314 | 315 | ProjectExplorer.Project.TargetCount 316 | 1 317 | 318 | 319 | ProjectExplorer.Project.Updater.FileVersion 320 | 20 321 | 322 | 323 | Version 324 | 20 325 | 326 | 327 | -------------------------------------------------------------------------------- /ex1-2/ex1.pro.user.d8a3ae6.4.8-pre1: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | EnvironmentId 7 | {d8a3ae69-6155-4257-88af-f62648863346} 8 | 9 | 10 | ProjectExplorer.Project.ActiveTarget 11 | 0 12 | 13 | 14 | ProjectExplorer.Project.EditorSettings 15 | 16 | true 17 | false 18 | true 19 | 20 | Cpp 21 | 22 | CppGlobal 23 | 24 | 25 | 26 | QmlJS 27 | 28 | QmlJSGlobal 29 | 30 | 31 | 2 32 | UTF-8 33 | false 34 | 4 35 | false 36 | 80 37 | true 38 | true 39 | 1 40 | true 41 | false 42 | 0 43 | true 44 | true 45 | 0 46 | 8 47 | true 48 | 1 49 | true 50 | true 51 | true 52 | false 53 | 54 | 55 | 56 | ProjectExplorer.Project.PluginSettings 57 | 58 | 59 | true 60 | 61 | 62 | 63 | ProjectExplorer.Project.Target.0 64 | 65 | Desktop Qt 5.11.1 GCC 64bit 66 | Desktop Qt 5.11.1 GCC 64bit 67 | qt.qt5.5111.gcc_64_kit 68 | 0 69 | 0 70 | 0 71 | 72 | /home/ypang/OsCourseDesign/build-ex1-Desktop_Qt_5_11_1_GCC_64bit-Debug 73 | 74 | 75 | true 76 | qmake 77 | 78 | QtProjectManager.QMakeBuildStep 79 | true 80 | 81 | false 82 | false 83 | false 84 | 85 | 86 | true 87 | Make 88 | 89 | Qt4ProjectManager.MakeStep 90 | 91 | -w 92 | -r 93 | 94 | false 95 | 96 | 97 | 98 | 2 99 | Build 100 | 101 | ProjectExplorer.BuildSteps.Build 102 | 103 | 104 | 105 | true 106 | Make 107 | 108 | Qt4ProjectManager.MakeStep 109 | 110 | -w 111 | -r 112 | 113 | true 114 | clean 115 | 116 | 117 | 1 118 | Clean 119 | 120 | ProjectExplorer.BuildSteps.Clean 121 | 122 | 2 123 | false 124 | 125 | Debug 126 | Debug 127 | Qt4ProjectManager.Qt4BuildConfiguration 128 | 2 129 | true 130 | 131 | 132 | /home/ypang/OsCourseDesign/build-ex1-Desktop_Qt_5_11_1_GCC_64bit-Release 133 | 134 | 135 | true 136 | qmake 137 | 138 | QtProjectManager.QMakeBuildStep 139 | false 140 | 141 | false 142 | false 143 | true 144 | 145 | 146 | true 147 | Make 148 | 149 | Qt4ProjectManager.MakeStep 150 | 151 | -w 152 | -r 153 | 154 | false 155 | 156 | 157 | 158 | 2 159 | Build 160 | 161 | ProjectExplorer.BuildSteps.Build 162 | 163 | 164 | 165 | true 166 | Make 167 | 168 | Qt4ProjectManager.MakeStep 169 | 170 | -w 171 | -r 172 | 173 | true 174 | clean 175 | 176 | 177 | 1 178 | Clean 179 | 180 | ProjectExplorer.BuildSteps.Clean 181 | 182 | 2 183 | false 184 | 185 | Release 186 | Release 187 | Qt4ProjectManager.Qt4BuildConfiguration 188 | 0 189 | true 190 | 191 | 192 | /home/ypang/OsCourseDesign/build-ex1-Desktop_Qt_5_11_1_GCC_64bit-Profile 193 | 194 | 195 | true 196 | qmake 197 | 198 | QtProjectManager.QMakeBuildStep 199 | true 200 | 201 | false 202 | true 203 | true 204 | 205 | 206 | true 207 | Make 208 | 209 | Qt4ProjectManager.MakeStep 210 | 211 | -w 212 | -r 213 | 214 | false 215 | 216 | 217 | 218 | 2 219 | Build 220 | 221 | ProjectExplorer.BuildSteps.Build 222 | 223 | 224 | 225 | true 226 | Make 227 | 228 | Qt4ProjectManager.MakeStep 229 | 230 | -w 231 | -r 232 | 233 | true 234 | clean 235 | 236 | 237 | 1 238 | Clean 239 | 240 | ProjectExplorer.BuildSteps.Clean 241 | 242 | 2 243 | false 244 | 245 | Profile 246 | Profile 247 | Qt4ProjectManager.Qt4BuildConfiguration 248 | 0 249 | true 250 | 251 | 3 252 | 253 | 254 | 0 255 | Deploy 256 | 257 | ProjectExplorer.BuildSteps.Deploy 258 | 259 | 1 260 | Deploy Configuration 261 | 262 | ProjectExplorer.DefaultDeployConfiguration 263 | 264 | 1 265 | 266 | 267 | false 268 | false 269 | 1000 270 | 271 | true 272 | 273 | false 274 | false 275 | false 276 | false 277 | true 278 | 0.01 279 | 10 280 | true 281 | 1 282 | 25 283 | 284 | 1 285 | true 286 | false 287 | true 288 | valgrind 289 | 290 | 0 291 | 1 292 | 2 293 | 3 294 | 4 295 | 5 296 | 6 297 | 7 298 | 8 299 | 9 300 | 10 301 | 11 302 | 12 303 | 13 304 | 14 305 | 306 | 2 307 | 308 | ex1 309 | 310 | Qt4ProjectManager.Qt4RunConfiguration:/home/ypang/OsCourseDesign/ex1/ex1.pro 311 | true 312 | 313 | ex1.pro 314 | 315 | /home/ypang/OsCourseDesign/build-ex1-Desktop_Qt_5_11_1_GCC_64bit-Debug 316 | 3768 317 | false 318 | true 319 | false 320 | false 321 | true 322 | 323 | 1 324 | 325 | 326 | 327 | ProjectExplorer.Project.TargetCount 328 | 1 329 | 330 | 331 | ProjectExplorer.Project.Updater.FileVersion 332 | 18 333 | 334 | 335 | Version 336 | 18 337 | 338 | 339 | -------------------------------------------------------------------------------- /ex1-2/main.cpp: -------------------------------------------------------------------------------- 1 | #include "widget.h" 2 | #include "widget1.h" 3 | #include "widget2.h" 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | int main(int argc, char *argv[]) 10 | { 11 | int pid; 12 | if((pid = fork()) == 0){ 13 | QApplication a(argc, argv); 14 | widget1 w; 15 | w.setWindowTitle("0-9循环显示"); 16 | w.show(); 17 | a.exec(); 18 | exit(0); 19 | } 20 | if((pid = fork()) == 0){ 21 | QApplication a(argc, argv); 22 | widget2 w; 23 | w.setWindowTitle("1-1000累加求和"); 24 | w.show(); 25 | a.exec(); 26 | exit(0); 27 | } 28 | QApplication a(argc, argv); 29 | Widget w; 30 | w.setWindowTitle("时间显示窗口"); 31 | w.show(); 32 | return a.exec(); 33 | } 34 | -------------------------------------------------------------------------------- /ex1-2/widget.cpp: -------------------------------------------------------------------------------- 1 | #include "widget.h" 2 | #include "ui_widget.h" 3 | #include 4 | #include 5 | #include 6 | 7 | Widget::Widget(QWidget *parent) : 8 | QWidget(parent), 9 | ui(new Ui::Widget) 10 | { 11 | ui->setupUi(this); 12 | this->setFixedSize(this->width(), this->height()); 13 | this->move(600, 400); 14 | 15 | int pid = getpid(); 16 | ui->label_2->setText(QString::number(pid, 10)); 17 | 18 | QDateTime curtime = QDateTime::currentDateTime(); 19 | ui->label_4->setText(curtime.toString("hh:mm::ss")); 20 | 21 | QTimer *timer = new QTimer(this); 22 | connect(timer, SIGNAL(timeout()), this, SLOT(Update())); 23 | timer->start(1000); 24 | } 25 | 26 | void Widget::Update(){ 27 | QDateTime curtime = QDateTime::currentDateTime(); 28 | ui->label_4->setText(curtime.toString("hh:mm::ss")); 29 | } 30 | 31 | Widget::~Widget() 32 | { 33 | delete ui; 34 | } 35 | -------------------------------------------------------------------------------- /ex1-2/widget.h: -------------------------------------------------------------------------------- 1 | #ifndef WIDGET_H 2 | #define WIDGET_H 3 | 4 | #include 5 | 6 | namespace Ui { 7 | class Widget; 8 | } 9 | 10 | class Widget : public QWidget 11 | { 12 | Q_OBJECT 13 | 14 | public: 15 | explicit Widget(QWidget *parent = nullptr); 16 | ~Widget(); 17 | 18 | public slots: 19 | void Update(); 20 | 21 | private: 22 | Ui::Widget *ui; 23 | }; 24 | 25 | #endif // WIDGET_H 26 | -------------------------------------------------------------------------------- /ex1-2/widget.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Widget 4 | 5 | 6 | 7 | 0 8 | 0 9 | 285 10 | 126 11 | 12 | 13 | 14 | Widget 15 | 16 | 17 | 18 | 19 | 40 20 | 20 21 | 209 22 | 89 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 当前进程pid: 32 | 33 | 34 | 35 | 36 | 37 | 38 | Qt::Horizontal 39 | 40 | 41 | 42 | 40 43 | 20 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | TextLabel 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | Qt::Vertical 61 | 62 | 63 | 64 | 20 65 | 28 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 当前时间: 76 | 77 | 78 | 79 | 80 | 81 | 82 | Qt::Horizontal 83 | 84 | 85 | 86 | 40 87 | 20 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | TextLabel 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | -------------------------------------------------------------------------------- /ex1-2/widget1.cpp: -------------------------------------------------------------------------------- 1 | #include "widget1.h" 2 | #include "ui_widget1.h" 3 | #include 4 | #include 5 | 6 | widget1::widget1(QWidget *parent) : 7 | QWidget(parent), 8 | ui(new Ui::widget1) 9 | { 10 | ui->setupUi(this); 11 | this->setFixedSize(this->width(), this->height()); 12 | this->move(900,400); 13 | 14 | int pid = getpid(); 15 | ui->label_2->setText(QString::number(pid, 10)); 16 | 17 | num = 0; 18 | ui->label_4->setText(QString::number(num, 10)); 19 | 20 | QTimer *timer = new QTimer(this); 21 | connect(timer, SIGNAL(timeout()), this, SLOT(Update())); 22 | timer->start(1000); 23 | } 24 | 25 | void widget1::Update(){ 26 | num = (num + 1) % 10; 27 | ui->label_4->setText(QString::number(num, 10)); 28 | } 29 | 30 | widget1::~widget1() 31 | { 32 | delete ui; 33 | } 34 | -------------------------------------------------------------------------------- /ex1-2/widget1.h: -------------------------------------------------------------------------------- 1 | #ifndef WIDGET1_H 2 | #define WIDGET1_H 3 | 4 | #include 5 | 6 | namespace Ui { 7 | class widget1; 8 | } 9 | 10 | class widget1 : public QWidget 11 | { 12 | Q_OBJECT 13 | 14 | public: 15 | explicit widget1(QWidget *parent = nullptr); 16 | ~widget1(); 17 | 18 | public slots: 19 | void Update(); 20 | 21 | private: 22 | int num; 23 | Ui::widget1 *ui; 24 | }; 25 | 26 | #endif // WIDGET1_H 27 | -------------------------------------------------------------------------------- /ex1-2/widget1.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | widget1 4 | 5 | 6 | 7 | 0 8 | 0 9 | 285 10 | 126 11 | 12 | 13 | 14 | Widget 15 | 16 | 17 | 18 | 19 | 40 20 | 20 21 | 209 22 | 89 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 当前进程pid: 32 | 33 | 34 | 35 | 36 | 37 | 38 | Qt::Horizontal 39 | 40 | 41 | 42 | 40 43 | 20 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | TextLabel 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | Qt::Vertical 61 | 62 | 63 | 64 | 20 65 | 28 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 0-9循环显示: 76 | 77 | 78 | 79 | 80 | 81 | 82 | Qt::Horizontal 83 | 84 | 85 | 86 | 40 87 | 20 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | TextLabel 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | -------------------------------------------------------------------------------- /ex1-2/widget2.cpp: -------------------------------------------------------------------------------- 1 | #include "widget2.h" 2 | #include "ui_widget2.h" 3 | #include 4 | #include 5 | 6 | widget2::widget2(QWidget *parent) : 7 | QWidget(parent), 8 | ui(new Ui::widget2) 9 | { 10 | ui->setupUi(this); 11 | this->setFixedSize(this->width(), this->height()); 12 | this->move(1200, 400); 13 | 14 | int pid = getpid(); 15 | ui->label_2->setText(QString::number(pid, 10)); 16 | 17 | sum = 0; 18 | num = 1; 19 | ui->label_4->setText(QString::number(sum, 10)); 20 | 21 | QTimer *timer = new QTimer(this); 22 | connect(timer, SIGNAL(timeout()), this, SLOT(Update())); 23 | timer->start(1000); 24 | } 25 | 26 | void widget2::Update(){ 27 | if(num <= 1000) 28 | sum += num++; 29 | ui->label_4->setText(QString::number(sum, 10)); 30 | ui->label_6->setText(QString::number(num - 1, 10)); 31 | } 32 | widget2::~widget2() 33 | { 34 | delete ui; 35 | } 36 | -------------------------------------------------------------------------------- /ex1-2/widget2.h: -------------------------------------------------------------------------------- 1 | #ifndef WIDGET2_H 2 | #define WIDGET2_H 3 | 4 | #include 5 | 6 | namespace Ui { 7 | class widget2; 8 | } 9 | 10 | class widget2 : public QWidget 11 | { 12 | Q_OBJECT 13 | 14 | public: 15 | explicit widget2(QWidget *parent = nullptr); 16 | ~widget2(); 17 | 18 | public slots: 19 | void Update(); 20 | 21 | private: 22 | int sum, num; 23 | Ui::widget2 *ui; 24 | }; 25 | 26 | #endif // WIDGET2_H 27 | -------------------------------------------------------------------------------- /ex1-2/widget2.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | widget2 4 | 5 | 6 | 7 | 0 8 | 0 9 | 285 10 | 125 11 | 12 | 13 | 14 | Widget 15 | 16 | 17 | 18 | 19 | 30 20 | 20 21 | 234 22 | 89 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 当前进程pid: 32 | 33 | 34 | 35 | 36 | 37 | 38 | Qt::Horizontal 39 | 40 | 41 | 42 | 40 43 | 20 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | TextLabel 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 当前累加数: 63 | 64 | 65 | 66 | 67 | 68 | 69 | Qt::Horizontal 70 | 71 | 72 | 73 | 40 74 | 20 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | TextLabel 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 1-1000累加和: 94 | 95 | 96 | 97 | 98 | 99 | 100 | Qt::Horizontal 101 | 102 | 103 | 104 | 40 105 | 20 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | TextLabel 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | -------------------------------------------------------------------------------- /ex2/a.out: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/ex2/a.out -------------------------------------------------------------------------------- /ex2/ex2.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | int main(){ 7 | // const char *a = "source"; 8 | // const char *b = "target"; 9 | // char a[100], b[100]; 10 | // scanf("%s%s", a, b); 11 | long ret = syscall(334, "ex2.c", "1.c"); 12 | // long ret = syscall(333); 13 | printf("this syscall return number is: %ld\n", ret); 14 | return 0; 15 | } 16 | -------------------------------------------------------------------------------- /ex2/ex2.md: -------------------------------------------------------------------------------- 1 | ## 运行环境 2 | * Ubuntu 18.04 64bit 3 | * 原内核版本:4.15.0-45-generic 4 | * 编译内核版本:4.19.19 5 | * gcc版本:7.3.0-27 6 | 7 | ## 实验过程 8 | ### 下载内核源码 9 | 内核源码下载自官网 10 | 11 |
代码编写参考:[内核态文件操作](https://blog.csdn.net/u011784994/article/details/52471345)
12 |
13 | #### 需要修改的地方有: 14 | * ./include/linux/syscalls.h 15 | * ./arch/x86/entry/syscalls/syscall_64.tbl 16 | * ./kernel/sys.c 17 | -------------------------------------------------------------------------------- /ex2/source: -------------------------------------------------------------------------------- 1 | dfsadafsdfsdasf 2 | -------------------------------------------------------------------------------- /ex2/source.txt: -------------------------------------------------------------------------------- 1 | asdfasdf 2 | -------------------------------------------------------------------------------- /ex3/.mydev.ko.cmd: -------------------------------------------------------------------------------- 1 | cmd_/home/eric142857/OsCourseDesign/ex3/mydev.ko := ld -r -m elf_x86_64 -z max-page-size=0x200000 -T ./scripts/module-common.lds --build-id -o /home/eric142857/OsCourseDesign/ex3/mydev.ko /home/eric142857/OsCourseDesign/ex3/mydev.o /home/eric142857/OsCourseDesign/ex3/mydev.mod.o ; true 2 | -------------------------------------------------------------------------------- /ex3/.tmp_versions/mydev.mod: -------------------------------------------------------------------------------- 1 | /home/eric142857/OsCourseDesign/ex3/mydev.ko 2 | /home/eric142857/OsCourseDesign/ex3/mydev.o 3 | 4 | -------------------------------------------------------------------------------- /ex3/Makefile: -------------------------------------------------------------------------------- 1 | ifneq ($(KERNELRELEASE),) 2 | obj-m = mydev.o 3 | else 4 | KERNELDIR := /lib/modules/$(shell uname -r)/build 5 | PWD := $(shell pwd) 6 | modules: 7 | $(MAKE) -C $(KERNELDIR) M=$(PWD) modules 8 | endif 9 | 10 | clean: 11 | rm -rf .tmp_versions Module.symvers modules.order .tmp_versions .*.cmd *.o *.ko *.mod.c 12 | -------------------------------------------------------------------------------- /ex3/Module.symvers: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/ex3/Module.symvers -------------------------------------------------------------------------------- /ex3/modules.order: -------------------------------------------------------------------------------- 1 | kernel//home/eric142857/OsCourseDesign/ex3/mydev.ko 2 | -------------------------------------------------------------------------------- /ex3/mydev.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | 8 | int dev1_registers[5]; 9 | int dev2_registers[5]; 10 | 11 | struct cdev cdev; 12 | dev_t devno; 13 | 14 | /*文件打开函数*/ 15 | int my_open(struct inode *inode, struct file *filp){ 16 | /*获取次设备号*/ 17 | printk("open dev\n"); 18 | int num = MINOR(inode->i_rdev); 19 | if (num==0) 20 | filp->private_data = dev1_registers; 21 | else if(num == 1) 22 | filp->private_data = dev2_registers; 23 | else 24 | return -ENODEV; //无效的次设备号 25 | 26 | return 0; 27 | } 28 | 29 | /*文件释放函数*/ 30 | int my_release(struct inode *inode, struct file *filp){ 31 | printk("release dev\n"); 32 | return 0; 33 | } 34 | 35 | /*读函数*/ 36 | static ssize_t my_read(struct file *filp, char __user *buf, size_t size, loff_t *ppos){ 37 | unsigned long p = *ppos; 38 | unsigned int count = size; 39 | int ret = 0; 40 | int *register_addr = filp->private_data; /*获取设备的寄存器基地址*/ 41 | 42 | /*判断读位置是否有效*/ 43 | if (p >= 5*sizeof(int)) 44 | return 0; 45 | if (count > 5*sizeof(int) - p) 46 | count = 5*sizeof(int) - p; 47 | 48 | /*读数据到用户空间*/ 49 | if (raw_copy_to_user(buf, register_addr+p, count)) 50 | { 51 | ret = -EFAULT; 52 | } 53 | else 54 | { 55 | *ppos += count; 56 | ret = count; 57 | } 58 | return ret; 59 | } 60 | 61 | /*写函数*/ 62 | static ssize_t my_write(struct file *filp, const char __user *buf, size_t size, loff_t *ppos) 63 | { 64 | unsigned long p = *ppos; 65 | unsigned int count = size; 66 | int ret = 0; 67 | int *register_addr = filp->private_data; /*获取设备的寄存器地址*/ 68 | 69 | /*分析和获取有效的写长度*/ 70 | if (p >= 5*sizeof(int)) 71 | return 0; 72 | if (count > 5*sizeof(int) - p) 73 | count = 5*sizeof(int) - p; 74 | 75 | /*从用户空间写入数据*/ 76 | if (raw_copy_from_user(register_addr + p, buf, count)) 77 | ret = -EFAULT; 78 | else 79 | { 80 | *ppos += count; 81 | ret = count; 82 | } 83 | 84 | return ret; 85 | } 86 | 87 | /* seek文件定位函数 */ 88 | static loff_t my_llseek(struct file *filp, loff_t offset, int whence) 89 | { 90 | loff_t newpos; 91 | 92 | switch(whence) { 93 | case SEEK_SET: 94 | newpos = offset; 95 | break; 96 | 97 | case SEEK_CUR: 98 | newpos = filp->f_pos + offset; 99 | break; 100 | 101 | case SEEK_END: 102 | newpos = 5*sizeof(int)-1 + offset; 103 | break; 104 | 105 | default: 106 | return -EINVAL; 107 | } 108 | if ((newpos<0) || (newpos>5*sizeof(int))) 109 | return -EINVAL; 110 | 111 | filp->f_pos = newpos; 112 | return newpos; 113 | 114 | } 115 | 116 | /*文件操作结构体*/ 117 | static const struct file_operations my_fops = 118 | { 119 | .llseek = my_llseek, 120 | .read = my_read, 121 | .write = my_write, 122 | .open = my_open, 123 | .release = my_release, 124 | }; 125 | 126 | /*设备驱动模块加载函数*/ 127 | static int mydev_init(void) 128 | { 129 | /*初始化cdev结构*/ 130 | cdev_init(&cdev, &my_fops); 131 | 132 | /* 注册字符设备 */ 133 | alloc_chrdev_region(&devno, 0, 2, "mydev"); 134 | cdev_add(&cdev, devno, 2); 135 | return 0; 136 | } 137 | 138 | /*模块卸载函数*/ 139 | static void mydev_exit(void) 140 | { 141 | cdev_del(&cdev); /*注销设备*/ 142 | unregister_chrdev_region(devno, 2); /*释放设备号*/ 143 | return; 144 | } 145 | 146 | MODULE_LICENSE("GPL"); 147 | 148 | module_init(mydev_init); 149 | module_exit(mydev_exit); 150 | -------------------------------------------------------------------------------- /ex3/mydev.ko: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/ex3/mydev.ko -------------------------------------------------------------------------------- /ex3/mydev.mod.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | MODULE_INFO(vermagic, VERMAGIC_STRING); 6 | MODULE_INFO(name, KBUILD_MODNAME); 7 | 8 | __visible struct module __this_module 9 | __attribute__((section(".gnu.linkonce.this_module"))) = { 10 | .name = KBUILD_MODNAME, 11 | .init = init_module, 12 | #ifdef CONFIG_MODULE_UNLOAD 13 | .exit = cleanup_module, 14 | #endif 15 | .arch = MODULE_ARCH_INIT, 16 | }; 17 | 18 | #ifdef CONFIG_RETPOLINE 19 | MODULE_INFO(retpoline, "Y"); 20 | #endif 21 | 22 | static const char __module_depends[] 23 | __used 24 | __attribute__((section(".modinfo"))) = 25 | "depends="; 26 | 27 | 28 | MODULE_INFO(srcversion, "DA0720105E9294057D5F706"); 29 | -------------------------------------------------------------------------------- /ex3/mydev.mod.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/ex3/mydev.mod.o -------------------------------------------------------------------------------- /ex3/mydev.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/ex3/mydev.o -------------------------------------------------------------------------------- /ex4/build-taskmanager-Desktop_Qt_5_12_1_GCC_64bit-Debug/.qmake.stash: -------------------------------------------------------------------------------- 1 | QMAKE_CXX.QT_COMPILER_STDCXX = 201402L 2 | QMAKE_CXX.QMAKE_GCC_MAJOR_VERSION = 7 3 | QMAKE_CXX.QMAKE_GCC_MINOR_VERSION = 3 4 | QMAKE_CXX.QMAKE_GCC_PATCH_VERSION = 0 5 | QMAKE_CXX.COMPILER_MACROS = \ 6 | QT_COMPILER_STDCXX \ 7 | QMAKE_GCC_MAJOR_VERSION \ 8 | QMAKE_GCC_MINOR_VERSION \ 9 | QMAKE_GCC_PATCH_VERSION 10 | QMAKE_CXX.INCDIRS = \ 11 | /usr/include/c++/7 \ 12 | /usr/include/x86_64-linux-gnu/c++/7 \ 13 | /usr/include/c++/7/backward \ 14 | /usr/lib/gcc/x86_64-linux-gnu/7/include \ 15 | /usr/local/include \ 16 | /usr/lib/gcc/x86_64-linux-gnu/7/include-fixed \ 17 | /usr/include/x86_64-linux-gnu \ 18 | /usr/include 19 | QMAKE_CXX.LIBDIRS = \ 20 | /usr/lib/gcc/x86_64-linux-gnu/7 \ 21 | /usr/lib/x86_64-linux-gnu \ 22 | /usr/lib \ 23 | /lib/x86_64-linux-gnu \ 24 | /lib 25 | -------------------------------------------------------------------------------- /ex4/build-taskmanager-Desktop_Qt_5_12_1_GCC_64bit-Debug/main.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/ex4/build-taskmanager-Desktop_Qt_5_12_1_GCC_64bit-Debug/main.o -------------------------------------------------------------------------------- /ex4/build-taskmanager-Desktop_Qt_5_12_1_GCC_64bit-Debug/moc_predefs.h: -------------------------------------------------------------------------------- 1 | #define __SSP_STRONG__ 3 2 | #define __DBL_MIN_EXP__ (-1021) 3 | #define __FLT32X_MAX_EXP__ 1024 4 | #define __cpp_attributes 200809 5 | #define __UINT_LEAST16_MAX__ 0xffff 6 | #define __ATOMIC_ACQUIRE 2 7 | #define __FLT128_MAX_10_EXP__ 4932 8 | #define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F 9 | #define __GCC_IEC_559_COMPLEX 2 10 | #define __UINT_LEAST8_TYPE__ unsigned char 11 | #define __SIZEOF_FLOAT80__ 16 12 | #define __INTMAX_C(c) c ## L 13 | #define __CHAR_BIT__ 8 14 | #define __UINT8_MAX__ 0xff 15 | #define __WINT_MAX__ 0xffffffffU 16 | #define __FLT32_MIN_EXP__ (-125) 17 | #define __cpp_static_assert 200410 18 | #define __ORDER_LITTLE_ENDIAN__ 1234 19 | #define __SIZE_MAX__ 0xffffffffffffffffUL 20 | #define __WCHAR_MAX__ 0x7fffffff 21 | #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 22 | #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 23 | #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 24 | #define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L) 25 | #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 26 | #define __GCC_ATOMIC_CHAR_LOCK_FREE 2 27 | #define __GCC_IEC_559 2 28 | #define __FLT32X_DECIMAL_DIG__ 17 29 | #define __FLT_EVAL_METHOD__ 0 30 | #define __unix__ 1 31 | #define __cpp_binary_literals 201304 32 | #define __FLT64_DECIMAL_DIG__ 17 33 | #define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 34 | #define __x86_64 1 35 | #define __cpp_variadic_templates 200704 36 | #define __UINT_FAST64_MAX__ 0xffffffffffffffffUL 37 | #define __SIG_ATOMIC_TYPE__ int 38 | #define __DBL_MIN_10_EXP__ (-307) 39 | #define __FINITE_MATH_ONLY__ 0 40 | #define __GNUC_PATCHLEVEL__ 0 41 | #define __FLT32_HAS_DENORM__ 1 42 | #define __UINT_FAST8_MAX__ 0xff 43 | #define __has_include(STR) __has_include__(STR) 44 | #define __DEC64_MAX_EXP__ 385 45 | #define __INT8_C(c) c 46 | #define __INT_LEAST8_WIDTH__ 8 47 | #define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL 48 | #define __SHRT_MAX__ 0x7fff 49 | #define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L 50 | #define __FLT64X_MAX_10_EXP__ 4932 51 | #define __UINT_LEAST8_MAX__ 0xff 52 | #define __GCC_ATOMIC_BOOL_LOCK_FREE 2 53 | #define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 54 | #define __UINTMAX_TYPE__ long unsigned int 55 | #define __linux 1 56 | #define __DEC32_EPSILON__ 1E-6DF 57 | #define __FLT_EVAL_METHOD_TS_18661_3__ 0 58 | #define __unix 1 59 | #define __UINT32_MAX__ 0xffffffffU 60 | #define __GXX_EXPERIMENTAL_CXX0X__ 1 61 | #define __LDBL_MAX_EXP__ 16384 62 | #define __FLT128_MIN_EXP__ (-16381) 63 | #define __WINT_MIN__ 0U 64 | #define __linux__ 1 65 | #define __FLT128_MIN_10_EXP__ (-4931) 66 | #define __INT_LEAST16_WIDTH__ 16 67 | #define __SCHAR_MAX__ 0x7f 68 | #define __FLT128_MANT_DIG__ 113 69 | #define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) 70 | #define __INT64_C(c) c ## L 71 | #define __DBL_DIG__ 15 72 | #define __GCC_ATOMIC_POINTER_LOCK_FREE 2 73 | #define __FLT64X_MANT_DIG__ 64 74 | #define __SIZEOF_INT__ 4 75 | #define __SIZEOF_POINTER__ 8 76 | #define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 77 | #define __USER_LABEL_PREFIX__ 78 | #define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x 79 | #define __STDC_HOSTED__ 1 80 | #define __LDBL_HAS_INFINITY__ 1 81 | #define __FLT32_DIG__ 6 82 | #define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F 83 | #define __GXX_WEAK__ 1 84 | #define __SHRT_WIDTH__ 16 85 | #define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L 86 | #define __DEC32_MAX__ 9.999999E96DF 87 | #define __cpp_threadsafe_static_init 200806 88 | #define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x 89 | #define __FLT32X_HAS_INFINITY__ 1 90 | #define __INT32_MAX__ 0x7fffffff 91 | #define __INT_WIDTH__ 32 92 | #define __SIZEOF_LONG__ 8 93 | #define __STDC_IEC_559__ 1 94 | #define __STDC_ISO_10646__ 201706L 95 | #define __UINT16_C(c) c 96 | #define __PTRDIFF_WIDTH__ 64 97 | #define __DECIMAL_DIG__ 21 98 | #define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 99 | #define __gnu_linux__ 1 100 | #define __INTMAX_WIDTH__ 64 101 | #define __FLT64_MIN_EXP__ (-1021) 102 | #define __has_include_next(STR) __has_include_next__(STR) 103 | #define __FLT64X_MIN_10_EXP__ (-4931) 104 | #define __LDBL_HAS_QUIET_NAN__ 1 105 | #define __FLT64_MANT_DIG__ 53 106 | #define __GNUC__ 7 107 | #define __GXX_RTTI 1 108 | #define __pie__ 2 109 | #define __MMX__ 1 110 | #define __cpp_delegating_constructors 200604 111 | #define __FLT_HAS_DENORM__ 1 112 | #define __SIZEOF_LONG_DOUBLE__ 16 113 | #define __BIGGEST_ALIGNMENT__ 16 114 | #define __STDC_UTF_16__ 1 115 | #define __FLT64_MAX_10_EXP__ 308 116 | #define __FLT32_HAS_INFINITY__ 1 117 | #define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L) 118 | #define __cpp_raw_strings 200710 119 | #define __INT_FAST32_MAX__ 0x7fffffffffffffffL 120 | #define __DBL_HAS_INFINITY__ 1 121 | #define __INT64_MAX__ 0x7fffffffffffffffL 122 | #define __DEC32_MIN_EXP__ (-94) 123 | #define __INTPTR_WIDTH__ 64 124 | #define __FLT32X_HAS_DENORM__ 1 125 | #define __INT_FAST16_TYPE__ long int 126 | #define __LDBL_HAS_DENORM__ 1 127 | #define __cplusplus 201103L 128 | #define __cpp_ref_qualifiers 200710 129 | #define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL 130 | #define __INT_LEAST32_MAX__ 0x7fffffff 131 | #define __DEC32_MIN__ 1E-95DF 132 | #define __DEPRECATED 1 133 | #define __cpp_rvalue_references 200610 134 | #define __DBL_MAX_EXP__ 1024 135 | #define __WCHAR_WIDTH__ 32 136 | #define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 137 | #define __DEC128_EPSILON__ 1E-33DL 138 | #define __SSE2_MATH__ 1 139 | #define __ATOMIC_HLE_RELEASE 131072 140 | #define __PTRDIFF_MAX__ 0x7fffffffffffffffL 141 | #define __amd64 1 142 | #define __STDC_NO_THREADS__ 1 143 | #define __ATOMIC_HLE_ACQUIRE 65536 144 | #define __FLT32_HAS_QUIET_NAN__ 1 145 | #define __GNUG__ 7 146 | #define __LONG_LONG_MAX__ 0x7fffffffffffffffLL 147 | #define __SIZEOF_SIZE_T__ 8 148 | #define __cpp_rvalue_reference 200610 149 | #define __cpp_nsdmi 200809 150 | #define __FLT64X_MIN_EXP__ (-16381) 151 | #define __SIZEOF_WINT_T__ 4 152 | #define __LONG_LONG_WIDTH__ 64 153 | #define __cpp_initializer_lists 200806 154 | #define __FLT32_MAX_EXP__ 128 155 | #define __cpp_hex_float 201603 156 | #define __GCC_HAVE_DWARF2_CFI_ASM 1 157 | #define __GXX_ABI_VERSION 1011 158 | #define __FLT128_HAS_INFINITY__ 1 159 | #define __FLT_MIN_EXP__ (-125) 160 | #define __cpp_lambdas 200907 161 | #define __FLT64X_HAS_QUIET_NAN__ 1 162 | #define __INT_FAST64_TYPE__ long int 163 | #define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 164 | #define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L) 165 | #define __PIE__ 2 166 | #define __LP64__ 1 167 | #define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x 168 | #define __DECIMAL_BID_FORMAT__ 1 169 | #define __FLT64_MIN_10_EXP__ (-307) 170 | #define __FLT64X_DECIMAL_DIG__ 21 171 | #define __DEC128_MIN__ 1E-6143DL 172 | #define __REGISTER_PREFIX__ 173 | #define __UINT16_MAX__ 0xffff 174 | #define __DBL_HAS_DENORM__ 1 175 | #define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 176 | #define __UINT8_TYPE__ unsigned char 177 | #define __NO_INLINE__ 1 178 | #define __FLT_MANT_DIG__ 24 179 | #define __LDBL_DECIMAL_DIG__ 21 180 | #define __VERSION__ "7.3.0" 181 | #define __UINT64_C(c) c ## UL 182 | #define __cpp_unicode_characters 200704 183 | #define _STDC_PREDEF_H 1 184 | #define __GCC_ATOMIC_INT_LOCK_FREE 2 185 | #define __FLT128_MAX_EXP__ 16384 186 | #define __FLT32_MANT_DIG__ 24 187 | #define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ 188 | #define __STDC_IEC_559_COMPLEX__ 1 189 | #define __FLT128_HAS_DENORM__ 1 190 | #define __FLT128_DIG__ 33 191 | #define __SCHAR_WIDTH__ 8 192 | #define __INT32_C(c) c 193 | #define __DEC64_EPSILON__ 1E-15DD 194 | #define __ORDER_PDP_ENDIAN__ 3412 195 | #define __DEC128_MIN_EXP__ (-6142) 196 | #define __FLT32_MAX_10_EXP__ 38 197 | #define __INT_FAST32_TYPE__ long int 198 | #define __UINT_LEAST16_TYPE__ short unsigned int 199 | #define __FLT64X_HAS_INFINITY__ 1 200 | #define unix 1 201 | #define __INT16_MAX__ 0x7fff 202 | #define __cpp_rtti 199711 203 | #define __SIZE_TYPE__ long unsigned int 204 | #define __UINT64_MAX__ 0xffffffffffffffffUL 205 | #define __FLT64X_DIG__ 18 206 | #define __INT8_TYPE__ signed char 207 | #define __ELF__ 1 208 | #define __GCC_ASM_FLAG_OUTPUTS__ 1 209 | #define __FLT_RADIX__ 2 210 | #define __INT_LEAST16_TYPE__ short int 211 | #define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L 212 | #define __UINTMAX_C(c) c ## UL 213 | #define __GLIBCXX_BITSIZE_INT_N_0 128 214 | #define __k8 1 215 | #define __SIG_ATOMIC_MAX__ 0x7fffffff 216 | #define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 217 | #define __SIZEOF_PTRDIFF_T__ 8 218 | #define __FLT32X_MANT_DIG__ 53 219 | #define __x86_64__ 1 220 | #define __FLT32X_MIN_EXP__ (-1021) 221 | #define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF 222 | #define __INT_FAST16_MAX__ 0x7fffffffffffffffL 223 | #define __FLT64_DIG__ 15 224 | #define __UINT_FAST32_MAX__ 0xffffffffffffffffUL 225 | #define __UINT_LEAST64_TYPE__ long unsigned int 226 | #define __FLT_HAS_QUIET_NAN__ 1 227 | #define __FLT_MAX_10_EXP__ 38 228 | #define __LONG_MAX__ 0x7fffffffffffffffL 229 | #define __FLT64X_HAS_DENORM__ 1 230 | #define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL 231 | #define __FLT_HAS_INFINITY__ 1 232 | #define __cpp_unicode_literals 200710 233 | #define __UINT_FAST16_TYPE__ long unsigned int 234 | #define __DEC64_MAX__ 9.999999999999999E384DD 235 | #define __INT_FAST32_WIDTH__ 64 236 | #define __CHAR16_TYPE__ short unsigned int 237 | #define __PRAGMA_REDEFINE_EXTNAME 1 238 | #define __SIZE_WIDTH__ 64 239 | #define __SEG_FS 1 240 | #define __INT_LEAST16_MAX__ 0x7fff 241 | #define __DEC64_MANT_DIG__ 16 242 | #define __UINT_LEAST32_MAX__ 0xffffffffU 243 | #define __SEG_GS 1 244 | #define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 245 | #define __GCC_ATOMIC_LONG_LOCK_FREE 2 246 | #define __SIG_ATOMIC_WIDTH__ 32 247 | #define __INT_LEAST64_TYPE__ long int 248 | #define __INT16_TYPE__ short int 249 | #define __INT_LEAST8_TYPE__ signed char 250 | #define __DEC32_MAX_EXP__ 97 251 | #define __INT_FAST8_MAX__ 0x7f 252 | #define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 253 | #define __INTPTR_MAX__ 0x7fffffffffffffffL 254 | #define linux 1 255 | #define __cpp_range_based_for 200907 256 | #define __FLT64_HAS_QUIET_NAN__ 1 257 | #define __FLT32_MIN_10_EXP__ (-37) 258 | #define __SSE2__ 1 259 | #define __EXCEPTIONS 1 260 | #define __LDBL_MANT_DIG__ 64 261 | #define __DBL_HAS_QUIET_NAN__ 1 262 | #define __FLT64_HAS_INFINITY__ 1 263 | #define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x 264 | #define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) 265 | #define __code_model_small__ 1 266 | #define __k8__ 1 267 | #define __INTPTR_TYPE__ long int 268 | #define __UINT16_TYPE__ short unsigned int 269 | #define __WCHAR_TYPE__ int 270 | #define __SIZEOF_FLOAT__ 4 271 | #define __pic__ 2 272 | #define __UINTPTR_MAX__ 0xffffffffffffffffUL 273 | #define __INT_FAST64_WIDTH__ 64 274 | #define __DEC64_MIN_EXP__ (-382) 275 | #define __cpp_decltype 200707 276 | #define __FLT32_DECIMAL_DIG__ 9 277 | #define __INT_FAST64_MAX__ 0x7fffffffffffffffL 278 | #define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 279 | #define __FLT_DIG__ 6 280 | #define __FLT64X_MAX_EXP__ 16384 281 | #define __UINT_FAST64_TYPE__ long unsigned int 282 | #define __INT_MAX__ 0x7fffffff 283 | #define __amd64__ 1 284 | #define __INT64_TYPE__ long int 285 | #define __FLT_MAX_EXP__ 128 286 | #define __ORDER_BIG_ENDIAN__ 4321 287 | #define __DBL_MANT_DIG__ 53 288 | #define __cpp_inheriting_constructors 201511 289 | #define __SIZEOF_FLOAT128__ 16 290 | #define __INT_LEAST64_MAX__ 0x7fffffffffffffffL 291 | #define __DEC64_MIN__ 1E-383DD 292 | #define __WINT_TYPE__ unsigned int 293 | #define __UINT_LEAST32_TYPE__ unsigned int 294 | #define __SIZEOF_SHORT__ 2 295 | #define __SSE__ 1 296 | #define __LDBL_MIN_EXP__ (-16381) 297 | #define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 298 | #define __WINT_WIDTH__ 32 299 | #define __INT_LEAST8_MAX__ 0x7f 300 | #define __FLT32X_MAX_10_EXP__ 308 301 | #define __SIZEOF_INT128__ 16 302 | #define __LDBL_MAX_10_EXP__ 4932 303 | #define __ATOMIC_RELAXED 0 304 | #define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L) 305 | #define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 306 | #define _LP64 1 307 | #define __UINT8_C(c) c 308 | #define __FLT64_MAX_EXP__ 1024 309 | #define __INT_LEAST32_TYPE__ int 310 | #define __SIZEOF_WCHAR_T__ 4 311 | #define __FLT128_HAS_QUIET_NAN__ 1 312 | #define __INT_FAST8_TYPE__ signed char 313 | #define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x 314 | #define __GNUC_STDC_INLINE__ 1 315 | #define __FLT64_HAS_DENORM__ 1 316 | #define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 317 | #define __DBL_DECIMAL_DIG__ 17 318 | #define __STDC_UTF_32__ 1 319 | #define __INT_FAST8_WIDTH__ 8 320 | #define __FXSR__ 1 321 | #define __DEC_EVAL_METHOD__ 2 322 | #define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x 323 | #define __cpp_runtime_arrays 198712 324 | #define __UINT64_TYPE__ long unsigned int 325 | #define __UINT32_C(c) c ## U 326 | #define __INTMAX_MAX__ 0x7fffffffffffffffL 327 | #define __cpp_alias_templates 200704 328 | #define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ 329 | #define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F 330 | #define __INT8_MAX__ 0x7f 331 | #define __LONG_WIDTH__ 64 332 | #define __PIC__ 2 333 | #define __UINT_FAST32_TYPE__ long unsigned int 334 | #define __CHAR32_TYPE__ unsigned int 335 | #define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F 336 | #define __cpp_constexpr 200704 337 | #define __INT32_TYPE__ int 338 | #define __SIZEOF_DOUBLE__ 8 339 | #define __cpp_exceptions 199711 340 | #define __FLT_MIN_10_EXP__ (-37) 341 | #define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 342 | #define __INT_LEAST32_WIDTH__ 32 343 | #define __INTMAX_TYPE__ long int 344 | #define __DEC128_MAX_EXP__ 6145 345 | #define __FLT32X_HAS_QUIET_NAN__ 1 346 | #define __ATOMIC_CONSUME 1 347 | #define __GNUC_MINOR__ 3 348 | #define __GLIBCXX_TYPE_INT_N_0 __int128 349 | #define __INT_FAST16_WIDTH__ 64 350 | #define __UINTMAX_MAX__ 0xffffffffffffffffUL 351 | #define __DEC32_MANT_DIG__ 7 352 | #define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x 353 | #define __DBL_MAX_10_EXP__ 308 354 | #define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L 355 | #define __INT16_C(c) c 356 | #define __STDC__ 1 357 | #define __FLT32X_DIG__ 15 358 | #define __PTRDIFF_TYPE__ long int 359 | #define __ATOMIC_SEQ_CST 5 360 | #define __UINT32_TYPE__ unsigned int 361 | #define __FLT32X_MIN_10_EXP__ (-307) 362 | #define __UINTPTR_TYPE__ long unsigned int 363 | #define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD 364 | #define __DEC128_MANT_DIG__ 34 365 | #define __LDBL_MIN_10_EXP__ (-4931) 366 | #define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 367 | #define __SSE_MATH__ 1 368 | #define __SIZEOF_LONG_LONG__ 8 369 | #define __cpp_user_defined_literals 200809 370 | #define __FLT128_DECIMAL_DIG__ 36 371 | #define __GCC_ATOMIC_LLONG_LOCK_FREE 2 372 | #define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x 373 | #define __LDBL_DIG__ 18 374 | #define __FLT_DECIMAL_DIG__ 9 375 | #define __UINT_FAST16_MAX__ 0xffffffffffffffffUL 376 | #define __GCC_ATOMIC_SHORT_LOCK_FREE 2 377 | #define __INT_LEAST64_WIDTH__ 64 378 | #define __UINT_FAST8_TYPE__ unsigned char 379 | #define _GNU_SOURCE 1 380 | #define __ATOMIC_ACQ_REL 4 381 | #define __ATOMIC_RELEASE 3 382 | -------------------------------------------------------------------------------- /ex4/build-taskmanager-Desktop_Qt_5_12_1_GCC_64bit-Debug/moc_taskmanager.cpp: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | ** Meta object code from reading C++ file 'taskmanager.h' 3 | ** 4 | ** Created by: The Qt Meta Object Compiler version 67 (Qt 5.12.1) 5 | ** 6 | ** WARNING! All changes made in this file will be lost! 7 | *****************************************************************************/ 8 | 9 | #include "../taskmanager/taskmanager.h" 10 | #include 11 | #include 12 | #if !defined(Q_MOC_OUTPUT_REVISION) 13 | #error "The header file 'taskmanager.h' doesn't include ." 14 | #elif Q_MOC_OUTPUT_REVISION != 67 15 | #error "This file was generated using the moc from 5.12.1. It" 16 | #error "cannot be used with the include files from this version of Qt." 17 | #error "(The moc has changed too much.)" 18 | #endif 19 | 20 | QT_BEGIN_MOC_NAMESPACE 21 | QT_WARNING_PUSH 22 | QT_WARNING_DISABLE_DEPRECATED 23 | struct qt_meta_stringdata_TaskManager_t { 24 | QByteArrayData data[4]; 25 | char stringdata0[30]; 26 | }; 27 | #define QT_MOC_LITERAL(idx, ofs, len) \ 28 | Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ 29 | qptrdiff(offsetof(qt_meta_stringdata_TaskManager_t, stringdata0) + ofs \ 30 | - idx * sizeof(QByteArrayData)) \ 31 | ) 32 | static const qt_meta_stringdata_TaskManager_t qt_meta_stringdata_TaskManager = { 33 | { 34 | QT_MOC_LITERAL(0, 0, 11), // "TaskManager" 35 | QT_MOC_LITERAL(1, 12, 4), // "Init" 36 | QT_MOC_LITERAL(2, 17, 0), // "" 37 | QT_MOC_LITERAL(3, 18, 11) // "UpdateUsage" 38 | 39 | }, 40 | "TaskManager\0Init\0\0UpdateUsage" 41 | }; 42 | #undef QT_MOC_LITERAL 43 | 44 | static const uint qt_meta_data_TaskManager[] = { 45 | 46 | // content: 47 | 8, // revision 48 | 0, // classname 49 | 0, 0, // classinfo 50 | 2, 14, // methods 51 | 0, 0, // properties 52 | 0, 0, // enums/sets 53 | 0, 0, // constructors 54 | 0, // flags 55 | 0, // signalCount 56 | 57 | // slots: name, argc, parameters, tag, flags 58 | 1, 0, 24, 2, 0x0a /* Public */, 59 | 3, 0, 25, 2, 0x0a /* Public */, 60 | 61 | // slots: parameters 62 | QMetaType::Void, 63 | QMetaType::Void, 64 | 65 | 0 // eod 66 | }; 67 | 68 | void TaskManager::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) 69 | { 70 | if (_c == QMetaObject::InvokeMetaMethod) { 71 | auto *_t = static_cast(_o); 72 | Q_UNUSED(_t) 73 | switch (_id) { 74 | case 0: _t->Init(); break; 75 | case 1: _t->UpdateUsage(); break; 76 | default: ; 77 | } 78 | } 79 | Q_UNUSED(_a); 80 | } 81 | 82 | QT_INIT_METAOBJECT const QMetaObject TaskManager::staticMetaObject = { { 83 | &QWidget::staticMetaObject, 84 | qt_meta_stringdata_TaskManager.data, 85 | qt_meta_data_TaskManager, 86 | qt_static_metacall, 87 | nullptr, 88 | nullptr 89 | } }; 90 | 91 | 92 | const QMetaObject *TaskManager::metaObject() const 93 | { 94 | return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; 95 | } 96 | 97 | void *TaskManager::qt_metacast(const char *_clname) 98 | { 99 | if (!_clname) return nullptr; 100 | if (!strcmp(_clname, qt_meta_stringdata_TaskManager.stringdata0)) 101 | return static_cast(this); 102 | return QWidget::qt_metacast(_clname); 103 | } 104 | 105 | int TaskManager::qt_metacall(QMetaObject::Call _c, int _id, void **_a) 106 | { 107 | _id = QWidget::qt_metacall(_c, _id, _a); 108 | if (_id < 0) 109 | return _id; 110 | if (_c == QMetaObject::InvokeMetaMethod) { 111 | if (_id < 2) 112 | qt_static_metacall(this, _c, _id, _a); 113 | _id -= 2; 114 | } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { 115 | if (_id < 2) 116 | *reinterpret_cast(_a[0]) = -1; 117 | _id -= 2; 118 | } 119 | return _id; 120 | } 121 | QT_WARNING_POP 122 | QT_END_MOC_NAMESPACE 123 | -------------------------------------------------------------------------------- /ex4/build-taskmanager-Desktop_Qt_5_12_1_GCC_64bit-Debug/moc_taskmanager.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/ex4/build-taskmanager-Desktop_Qt_5_12_1_GCC_64bit-Debug/moc_taskmanager.o -------------------------------------------------------------------------------- /ex4/build-taskmanager-Desktop_Qt_5_12_1_GCC_64bit-Debug/taskmanager: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/ex4/build-taskmanager-Desktop_Qt_5_12_1_GCC_64bit-Debug/taskmanager -------------------------------------------------------------------------------- /ex4/build-taskmanager-Desktop_Qt_5_12_1_GCC_64bit-Debug/taskmanager.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/ex4/build-taskmanager-Desktop_Qt_5_12_1_GCC_64bit-Debug/taskmanager.o -------------------------------------------------------------------------------- /ex4/build-taskmanager-Desktop_Qt_5_12_1_GCC_64bit-Debug/ui_taskmanager.h: -------------------------------------------------------------------------------- 1 | /******************************************************************************** 2 | ** Form generated from reading UI file 'taskmanager.ui' 3 | ** 4 | ** Created by: Qt User Interface Compiler version 5.12.1 5 | ** 6 | ** WARNING! All changes made in this file will be lost when recompiling UI file! 7 | ********************************************************************************/ 8 | 9 | #ifndef UI_TASKMANAGER_H 10 | #define UI_TASKMANAGER_H 11 | 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | 23 | QT_BEGIN_NAMESPACE 24 | 25 | class Ui_TaskManager 26 | { 27 | public: 28 | QTabWidget *tabWidget; 29 | QWidget *tab; 30 | QTableWidget *tableWidget; 31 | QPushButton *pushButton; 32 | QWidget *tab_2; 33 | QGroupBox *groupBox_2; 34 | QProgressBar *progressBar_mem; 35 | QLabel *label_memused; 36 | QLabel *label_memtotal; 37 | QGroupBox *groupBox_3; 38 | QProgressBar *progressBar_cpu; 39 | QProgressBar *progressBar_cpu0; 40 | QProgressBar *progressBar_cpu1; 41 | QProgressBar *progressBar_cpu2; 42 | QProgressBar *progressBar_cpu3; 43 | QLabel *label; 44 | QLabel *label_2; 45 | QLabel *label_3; 46 | QLabel *label_4; 47 | QLabel *label_5; 48 | QGroupBox *groupBox_4; 49 | QProgressBar *progressBar_disk1; 50 | QLabel *label_6; 51 | QLabel *label_11; 52 | QProgressBar *progressBar_disk2; 53 | QLabel *label_14; 54 | QProgressBar *progressBar_disk3; 55 | QWidget *tab_3; 56 | QWidget *tab_4; 57 | 58 | void setupUi(QWidget *TaskManager) 59 | { 60 | if (TaskManager->objectName().isEmpty()) 61 | TaskManager->setObjectName(QString::fromUtf8("TaskManager")); 62 | TaskManager->resize(721, 656); 63 | tabWidget = new QTabWidget(TaskManager); 64 | tabWidget->setObjectName(QString::fromUtf8("tabWidget")); 65 | tabWidget->setGeometry(QRect(10, 10, 701, 641)); 66 | tab = new QWidget(); 67 | tab->setObjectName(QString::fromUtf8("tab")); 68 | tableWidget = new QTableWidget(tab); 69 | tableWidget->setObjectName(QString::fromUtf8("tableWidget")); 70 | tableWidget->setGeometry(QRect(0, 0, 691, 571)); 71 | pushButton = new QPushButton(tab); 72 | pushButton->setObjectName(QString::fromUtf8("pushButton")); 73 | pushButton->setGeometry(QRect(590, 580, 89, 25)); 74 | tabWidget->addTab(tab, QString()); 75 | tab_2 = new QWidget(); 76 | tab_2->setObjectName(QString::fromUtf8("tab_2")); 77 | groupBox_2 = new QGroupBox(tab_2); 78 | groupBox_2->setObjectName(QString::fromUtf8("groupBox_2")); 79 | groupBox_2->setGeometry(QRect(20, 10, 661, 101)); 80 | progressBar_mem = new QProgressBar(groupBox_2); 81 | progressBar_mem->setObjectName(QString::fromUtf8("progressBar_mem")); 82 | progressBar_mem->setGeometry(QRect(30, 40, 601, 23)); 83 | progressBar_mem->setValue(24); 84 | label_memused = new QLabel(groupBox_2); 85 | label_memused->setObjectName(QString::fromUtf8("label_memused")); 86 | label_memused->setGeometry(QRect(40, 70, 241, 17)); 87 | label_memtotal = new QLabel(groupBox_2); 88 | label_memtotal->setObjectName(QString::fromUtf8("label_memtotal")); 89 | label_memtotal->setGeometry(QRect(510, 70, 131, 20)); 90 | groupBox_3 = new QGroupBox(tab_2); 91 | groupBox_3->setObjectName(QString::fromUtf8("groupBox_3")); 92 | groupBox_3->setGeometry(QRect(20, 130, 661, 191)); 93 | progressBar_cpu = new QProgressBar(groupBox_3); 94 | progressBar_cpu->setObjectName(QString::fromUtf8("progressBar_cpu")); 95 | progressBar_cpu->setGeometry(QRect(40, 50, 591, 23)); 96 | progressBar_cpu->setValue(24); 97 | progressBar_cpu0 = new QProgressBar(groupBox_3); 98 | progressBar_cpu0->setObjectName(QString::fromUtf8("progressBar_cpu0")); 99 | progressBar_cpu0->setGeometry(QRect(40, 130, 118, 23)); 100 | progressBar_cpu0->setValue(24); 101 | progressBar_cpu1 = new QProgressBar(groupBox_3); 102 | progressBar_cpu1->setObjectName(QString::fromUtf8("progressBar_cpu1")); 103 | progressBar_cpu1->setGeometry(QRect(190, 130, 118, 23)); 104 | progressBar_cpu1->setValue(24); 105 | progressBar_cpu2 = new QProgressBar(groupBox_3); 106 | progressBar_cpu2->setObjectName(QString::fromUtf8("progressBar_cpu2")); 107 | progressBar_cpu2->setGeometry(QRect(350, 130, 118, 23)); 108 | progressBar_cpu2->setValue(24); 109 | progressBar_cpu3 = new QProgressBar(groupBox_3); 110 | progressBar_cpu3->setObjectName(QString::fromUtf8("progressBar_cpu3")); 111 | progressBar_cpu3->setGeometry(QRect(510, 130, 118, 23)); 112 | progressBar_cpu3->setValue(24); 113 | label = new QLabel(groupBox_3); 114 | label->setObjectName(QString::fromUtf8("label")); 115 | label->setGeometry(QRect(90, 160, 67, 17)); 116 | label_2 = new QLabel(groupBox_3); 117 | label_2->setObjectName(QString::fromUtf8("label_2")); 118 | label_2->setGeometry(QRect(230, 160, 67, 17)); 119 | label_3 = new QLabel(groupBox_3); 120 | label_3->setObjectName(QString::fromUtf8("label_3")); 121 | label_3->setGeometry(QRect(390, 160, 67, 17)); 122 | label_4 = new QLabel(groupBox_3); 123 | label_4->setObjectName(QString::fromUtf8("label_4")); 124 | label_4->setGeometry(QRect(540, 160, 67, 17)); 125 | label_5 = new QLabel(groupBox_3); 126 | label_5->setObjectName(QString::fromUtf8("label_5")); 127 | label_5->setGeometry(QRect(320, 90, 67, 17)); 128 | groupBox_4 = new QGroupBox(tab_2); 129 | groupBox_4->setObjectName(QString::fromUtf8("groupBox_4")); 130 | groupBox_4->setGeometry(QRect(20, 340, 661, 251)); 131 | progressBar_disk1 = new QProgressBar(groupBox_4); 132 | progressBar_disk1->setObjectName(QString::fromUtf8("progressBar_disk1")); 133 | progressBar_disk1->setGeometry(QRect(40, 30, 591, 23)); 134 | progressBar_disk1->setValue(24); 135 | label_6 = new QLabel(groupBox_4); 136 | label_6->setObjectName(QString::fromUtf8("label_6")); 137 | label_6->setGeometry(QRect(310, 60, 67, 17)); 138 | label_11 = new QLabel(groupBox_4); 139 | label_11->setObjectName(QString::fromUtf8("label_11")); 140 | label_11->setGeometry(QRect(310, 140, 67, 17)); 141 | progressBar_disk2 = new QProgressBar(groupBox_4); 142 | progressBar_disk2->setObjectName(QString::fromUtf8("progressBar_disk2")); 143 | progressBar_disk2->setGeometry(QRect(40, 100, 591, 23)); 144 | progressBar_disk2->setValue(24); 145 | label_14 = new QLabel(groupBox_4); 146 | label_14->setObjectName(QString::fromUtf8("label_14")); 147 | label_14->setGeometry(QRect(310, 220, 67, 17)); 148 | progressBar_disk3 = new QProgressBar(groupBox_4); 149 | progressBar_disk3->setObjectName(QString::fromUtf8("progressBar_disk3")); 150 | progressBar_disk3->setGeometry(QRect(40, 180, 591, 23)); 151 | progressBar_disk3->setValue(24); 152 | tabWidget->addTab(tab_2, QString()); 153 | tab_3 = new QWidget(); 154 | tab_3->setObjectName(QString::fromUtf8("tab_3")); 155 | tabWidget->addTab(tab_3, QString()); 156 | tab_4 = new QWidget(); 157 | tab_4->setObjectName(QString::fromUtf8("tab_4")); 158 | tabWidget->addTab(tab_4, QString()); 159 | 160 | retranslateUi(TaskManager); 161 | 162 | tabWidget->setCurrentIndex(1); 163 | 164 | 165 | QMetaObject::connectSlotsByName(TaskManager); 166 | } // setupUi 167 | 168 | void retranslateUi(QWidget *TaskManager) 169 | { 170 | TaskManager->setWindowTitle(QApplication::translate("TaskManager", "TaskManager", nullptr)); 171 | pushButton->setText(QApplication::translate("TaskManager", "\347\273\223\346\235\237\350\277\233\347\250\213", nullptr)); 172 | tabWidget->setTabText(tabWidget->indexOf(tab), QApplication::translate("TaskManager", "\350\277\233\347\250\213", nullptr)); 173 | groupBox_2->setTitle(QApplication::translate("TaskManager", "Memory Usage", nullptr)); 174 | label_memused->setText(QApplication::translate("TaskManager", "TextLabel", nullptr)); 175 | label_memtotal->setText(QApplication::translate("TaskManager", "TextLabel", nullptr)); 176 | groupBox_3->setTitle(QApplication::translate("TaskManager", "Cpu Usage", nullptr)); 177 | label->setText(QApplication::translate("TaskManager", "core0", nullptr)); 178 | label_2->setText(QApplication::translate("TaskManager", "core1", nullptr)); 179 | label_3->setText(QApplication::translate("TaskManager", "core2", nullptr)); 180 | label_4->setText(QApplication::translate("TaskManager", "core3", nullptr)); 181 | label_5->setText(QApplication::translate("TaskManager", "usage", nullptr)); 182 | groupBox_4->setTitle(QApplication::translate("TaskManager", "Disk Usage", nullptr)); 183 | label_6->setText(QApplication::translate("TaskManager", "disk1", nullptr)); 184 | label_11->setText(QApplication::translate("TaskManager", "disk2", nullptr)); 185 | label_14->setText(QApplication::translate("TaskManager", "disk3", nullptr)); 186 | tabWidget->setTabText(tabWidget->indexOf(tab_2), QApplication::translate("TaskManager", "\346\200\247\350\203\275", nullptr)); 187 | tabWidget->setTabText(tabWidget->indexOf(tab_3), QApplication::translate("TaskManager", "Page", nullptr)); 188 | tabWidget->setTabText(tabWidget->indexOf(tab_4), QApplication::translate("TaskManager", "Page", nullptr)); 189 | } // retranslateUi 190 | 191 | }; 192 | 193 | namespace Ui { 194 | class TaskManager: public Ui_TaskManager {}; 195 | } // namespace Ui 196 | 197 | QT_END_NAMESPACE 198 | 199 | #endif // UI_TASKMANAGER_H 200 | -------------------------------------------------------------------------------- /ex4/taskmanager/main.cpp: -------------------------------------------------------------------------------- 1 | #include "taskmanager.h" 2 | #include 3 | 4 | int main(int argc, char *argv[]) 5 | { 6 | QApplication a(argc, argv); 7 | TaskManager w; 8 | w.show(); 9 | 10 | return a.exec(); 11 | } 12 | -------------------------------------------------------------------------------- /ex4/taskmanager/taskmanager.cpp: -------------------------------------------------------------------------------- 1 | #include "taskmanager.h" 2 | #include "ui_taskmanager.h" 3 | 4 | 5 | TaskManager::TaskManager(QWidget *parent) : 6 | QWidget(parent), 7 | ui(new Ui::TaskManager) 8 | { 9 | ui->setupUi(this); 10 | timer = new QTimer(this); 11 | connect(timer, SIGNAL(timeout()), this, SLOT(UpdateUsage())); 12 | timer->start(10); 13 | Init(); 14 | } 15 | 16 | void TaskManager::Init(){ 17 | ui->tableWidget->setRowCount(20); 18 | ui->tableWidget->setColumnCount(5); 19 | ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"applications"<<"pid"<<"stat"<<"priority"<<"nice"); 20 | ui->tableWidget->horizontalHeader()->resizeSection(0,200); //设置表头第一列的宽度为150 21 | ui->tableWidget->horizontalHeader()->resizeSection(1,110); //设置表头第一列的宽度为150 22 | ui->tableWidget->horizontalHeader()->resizeSection(2,110); //设置表头第一列的宽度为150 23 | ui->tableWidget->horizontalHeader()->resizeSection(3,110); //设置表头第一列的宽度为150 24 | ui->tableWidget->horizontalHeader()->resizeSection(4,110); //设置表头第一列的宽度为150 25 | ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //设置选择行为时每次选择一行 26 | ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); //设置不可编辑 27 | } 28 | 29 | 30 | void TaskManager::UpdateUsage(){ 31 | //UpdateMenUsage(); 32 | 33 | //UpdateCpuUsage(); 34 | 35 | //UpdateDiskUsage(); 36 | } 37 | 38 | void TaskManager::UpdateMenUsage(){ 39 | QFile file; 40 | QString str; 41 | double total, used; 42 | 43 | //内存信息 44 | file.setFileName("/proc/meminfo"); 45 | if(!file.open(QIODevice::ReadOnly)) return; 46 | // 47 | str = file.readLine(); 48 | total = str.mid(10, str.size() - 13).trimmed().toInt()/(1024*1024.0); 49 | ui->label_memtotal->setText("内存大小:" + QString::number(total, 'f', 1) + "GB"); 50 | // 51 | str = file.readLine(); 52 | used = total - str.mid(10, str.size() - 13).trimmed().toInt()/(1024*1024.0); 53 | ui->label_memused->setText("内存used:" + QString::number(used, 'f', 1) + "GB"); 54 | // 55 | ui->progressBar_mem->setValue(used*100/total); 56 | file.close(); 57 | } 58 | 59 | void TaskManager::UpdateCpuUsage(){ 60 | string tmp; 61 | double usage; 62 | int total1, total2, user, nice, system, idle1, idle2, 63 | iowait, irq, softirq, stealstolen, guest, guest_nice; 64 | int cpu0_total1, cpu0_total2, cpu0_idle1, cpu0_idle2, 65 | cpu1_total1, cpu1_total2, cpu1_idle1, cpu1_idle2, 66 | cpu2_total1, cpu2_total2, cpu2_idle1, cpu2_idle2, 67 | cpu3_total1, cpu3_total2, cpu3_idle1, cpu3_idle2; 68 | ifstream fin("/proc/stat", ios::in); 69 | fin >> tmp >> user >> nice >> system >> idle1 70 | >> iowait >> irq >> softirq >> stealstolen >> guest >> guest_nice; 71 | total1 = user + nice + system + idle1 + iowait + 72 | irq + softirq + stealstolen + guest + guest_nice; 73 | //cpu0 74 | fin >> tmp >> user >> nice >> system >> cpu0_idle1 75 | >> iowait >> irq >> softirq >> stealstolen >> guest >> guest_nice; 76 | cpu0_total1 = user + nice + system + cpu0_idle1 + iowait + 77 | irq + softirq + stealstolen + guest + guest_nice; 78 | //cpu1 79 | fin >> tmp >> user >> nice >> system >> cpu1_idle1 80 | >> iowait >> irq >> softirq >> stealstolen >> guest >> guest_nice; 81 | cpu1_total1 = user + nice + system + cpu1_idle1 + iowait + 82 | irq + softirq + stealstolen + guest + guest_nice; 83 | //cpu2 84 | fin >> tmp >> user >> nice >> system >> cpu2_idle1 85 | >> iowait >> irq >> softirq >> stealstolen >> guest >> guest_nice; 86 | cpu2_total1 = user + nice + system + cpu2_idle1 + iowait + 87 | irq + softirq + stealstolen + guest + guest_nice; 88 | //cpu3 89 | fin >> tmp >> user >> nice >> system >> cpu3_idle1 90 | >> iowait >> irq >> softirq >> stealstolen >> guest >> guest_nice; 91 | cpu3_total1 = user + nice + system + cpu3_idle1 + iowait + 92 | irq + softirq + stealstolen + guest + guest_nice; 93 | 94 | fin.close(); 95 | 96 | usleep(1000000); 97 | 98 | fin.open("/proc/stat", ios::in); 99 | fin >> tmp >> user >> nice >> system >> idle2 >> iowait >> 100 | irq >>softirq >> stealstolen >> guest >> guest_nice; 101 | total2 = user + nice + system + idle2 + iowait + 102 | irq + softirq + stealstolen + guest + guest_nice; 103 | //cpu0 104 | fin >> tmp >> user >> nice >> system >> cpu0_idle2 105 | >> iowait >> irq >> softirq >> stealstolen >> guest >> guest_nice; 106 | cpu0_total2 = user + nice + system + cpu0_idle2 + iowait + 107 | irq + softirq + stealstolen + guest + guest_nice; 108 | //cpu1 109 | fin >> tmp >> user >> nice >> system >> cpu1_idle2 110 | >> iowait >> irq >> softirq >> stealstolen >> guest >> guest_nice; 111 | cpu1_total2 = user + nice + system + cpu1_idle2 + iowait + 112 | irq + softirq + stealstolen + guest + guest_nice; 113 | //cpu2 114 | fin >> tmp >> user >> nice >> system >> cpu2_idle2 115 | >> iowait >> irq >> softirq >> stealstolen >> guest >> guest_nice; 116 | cpu2_total2 = user + nice + system + cpu2_idle2 + iowait + 117 | irq + softirq + stealstolen + guest + guest_nice; 118 | //cpu3 119 | fin >> tmp >> user >> nice >> system >> cpu3_idle2 120 | >> iowait >> irq >> softirq >> stealstolen >> guest >> guest_nice; 121 | cpu3_total2 = user + nice + system + cpu3_idle2 + iowait + 122 | irq + softirq + stealstolen + guest + guest_nice; 123 | 124 | usage = (total2 + idle1 - total1 - idle2) * 1.0 / (total2 - total1); 125 | ui->progressBar_cpu->setValue(usage * 100); 126 | usage = (cpu0_total2 + cpu0_idle1 - cpu0_total1 - cpu0_idle2) * 1.0 / (cpu0_total2 - cpu0_total1); 127 | ui->progressBar_cpu0->setValue(usage * 100); 128 | usage = (cpu1_total2 + cpu1_idle1 - cpu1_total1 - cpu1_idle2) * 1.0 / (cpu1_total2 - cpu1_total1); 129 | ui->progressBar_cpu1->setValue(usage * 100); 130 | usage = (cpu2_total2 + cpu2_idle1 - cpu2_total1 - cpu2_idle2) * 1.0 / (cpu2_total2 - cpu2_total1); 131 | ui->progressBar_cpu2->setValue(usage * 100); 132 | usage = (cpu3_total2 + cpu3_idle1 - cpu3_total1 - cpu3_idle2) * 1.0 / (cpu3_total2 - cpu3_total1); 133 | ui->progressBar_cpu3->setValue(usage * 100); 134 | 135 | fin.close(); 136 | } 137 | 138 | void TaskManager::UpdateDiskUsage(){ 139 | string str; 140 | int st; 141 | int use1[10],use2[10], count1 = 0, count2 = 0, t = 0; 142 | ifstream fin("/proc/diskstats", ios::in); 143 | while(!fin.eof()){ 144 | fin >> str >> str >> str; 145 | if(str.size() == 3 && str[0] == 's' && str[1] == 'd'){ 146 | for(int j = 0; j < 9; j++) 147 | fin >> str; 148 | fin >> use1[count1++]; 149 | if(count1 == 3) break; 150 | getline(fin, str); 151 | } 152 | else getline(fin, str); 153 | } 154 | fin.close(); 155 | 156 | usleep(1000000); 157 | 158 | fin.open("/proc/diskstats", ios::in); 159 | while(!fin.eof()){ 160 | fin >> str >> str >> str; 161 | if(str.size() == 3 && str[0] == 's' && str[1] == 'd'){ 162 | for(int j = 0; j < 9; j++) 163 | fin >> str; 164 | fin >> use2[count2++]; 165 | if(count2 == 3) break; 166 | getline(fin, str); 167 | } 168 | else getline(fin, str); 169 | } 170 | fin.close(); 171 | 172 | for(int i = 0; i < 3; i++){ 173 | switch(i){ 174 | case 0: 175 | ui->progressBar_disk1->setValue((use2[0] - use1[0]) / 10); 176 | cout << "use2:" << use2[0] << " use1:" << use1[0] << endl; 177 | break; 178 | case 1: 179 | ui->progressBar_disk2->setValue((use2[1] - use1[1]) / 10); 180 | cout << "use2:" << use2[1] << " use1:" << use1[1] << endl; 181 | break; 182 | case 2: 183 | ui->progressBar_disk3->setValue((use2[2] - use1[2]) / 10); 184 | cout << "use2:" << use2[2] << " use1:" << use1[2] << endl; 185 | break; 186 | } 187 | } 188 | } 189 | 190 | 191 | void TaskManager::UpdateProc(int pid){ 192 | string name, stat; 193 | int tmp, nice, priority; 194 | stringstream ss; 195 | ss << pid; 196 | 197 | ifstream fin("/proc/" + ss.str() + "/stat", ios::in); 198 | fin >> tmp >> name; 199 | fin.close(); 200 | 201 | fin.open("/proc/" + ss.str() + "/stat", ios::in); 202 | } 203 | 204 | TaskManager::~TaskManager() 205 | { 206 | delete ui; 207 | delete timer; 208 | } 209 | -------------------------------------------------------------------------------- /ex4/taskmanager/taskmanager.cpp.autosave: -------------------------------------------------------------------------------- 1 | #include "taskmanager.h" 2 | #include "ui_taskmanager.h" 3 | 4 | 5 | TaskManager::TaskManager(QWidget *parent) : 6 | QWidget(parent), 7 | ui(new Ui::TaskManager) 8 | { 9 | ui->setupUi(this); 10 | timer = new QTimer(this); 11 | connect(timer, SIGNAL(timeout()), this, SLOT(UpdateUsage())); 12 | timer->start(10); 13 | Init(); 14 | } 15 | 16 | void TaskManager::Init(){ 17 | ui->tableWidget->setRowCount(20); 18 | ui->tableWidget->setColumnCount(5); 19 | ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"applications"<<"pid"<<"stat"<<"priority"<<"nice"); 20 | ui->tableWidget->horizontalHeader()->resizeSection(0,200); //设置表头第一列的宽度为150 21 | //ui->tableWidget->horizontalHeader()->resizeSection(1,110); //设置表头第一列的宽度为150 22 | //ui->tableWidget->horizontalHeader()->resizeSection(2,110); //设置表头第一列的宽度为150 23 | //ui->tableWidget->horizontalHeader()->resizeSection(3,110); //设置表头第一列的宽度为150 24 | //ui->tableWidget->horizontalHeader()->resizeSection(4,110); //设置表头第一列的宽度为150 25 | ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //设置选择行为时每次选择一行 26 | ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); //设置不可编辑 27 | } 28 | 29 | 30 | void TaskManager::UpdateUsage(){ 31 | //UpdateMenUsage(); 32 | 33 | //UpdateCpuUsage(); 34 | 35 | //UpdateDiskUsage(); 36 | } 37 | 38 | void TaskManager::UpdateMenUsage(){ 39 | QFile file; 40 | QString str; 41 | double total, used; 42 | 43 | //内存信息 44 | file.setFileName("/proc/meminfo"); 45 | if(!file.open(QIODevice::ReadOnly)) return; 46 | // 47 | str = file.readLine(); 48 | total = str.mid(10, str.size() - 13).trimmed().toInt()/(1024*1024.0); 49 | ui->label_memtotal->setText("内存大小:" + QString::number(total, 'f', 1) + "GB"); 50 | // 51 | str = file.readLine(); 52 | used = total - str.mid(10, str.size() - 13).trimmed().toInt()/(1024*1024.0); 53 | ui->label_memused->setText("内存used:" + QString::number(used, 'f', 1) + "GB"); 54 | // 55 | ui->progressBar_mem->setValue(used*100/total); 56 | file.close(); 57 | } 58 | 59 | void TaskManager::UpdateCpuUsage(){ 60 | string tmp; 61 | double usage; 62 | int total1, total2, user, nice, system, idle1, idle2, 63 | iowait, irq, softirq, stealstolen, guest, guest_nice; 64 | int cpu0_total1, cpu0_total2, cpu0_idle1, cpu0_idle2, 65 | cpu1_total1, cpu1_total2, cpu1_idle1, cpu1_idle2, 66 | cpu2_total1, cpu2_total2, cpu2_idle1, cpu2_idle2, 67 | cpu3_total1, cpu3_total2, cpu3_idle1, cpu3_idle2; 68 | ifstream fin("/proc/stat", ios::in); 69 | fin >> tmp >> user >> nice >> system >> idle1 70 | >> iowait >> irq >> softirq >> stealstolen >> guest >> guest_nice; 71 | total1 = user + nice + system + idle1 + iowait + 72 | irq + softirq + stealstolen + guest + guest_nice; 73 | //cpu0 74 | fin >> tmp >> user >> nice >> system >> cpu0_idle1 75 | >> iowait >> irq >> softirq >> stealstolen >> guest >> guest_nice; 76 | cpu0_total1 = user + nice + system + cpu0_idle1 + iowait + 77 | irq + softirq + stealstolen + guest + guest_nice; 78 | //cpu1 79 | fin >> tmp >> user >> nice >> system >> cpu1_idle1 80 | >> iowait >> irq >> softirq >> stealstolen >> guest >> guest_nice; 81 | cpu1_total1 = user + nice + system + cpu1_idle1 + iowait + 82 | irq + softirq + stealstolen + guest + guest_nice; 83 | //cpu2 84 | fin >> tmp >> user >> nice >> system >> cpu2_idle1 85 | >> iowait >> irq >> softirq >> stealstolen >> guest >> guest_nice; 86 | cpu2_total1 = user + nice + system + cpu2_idle1 + iowait + 87 | irq + softirq + stealstolen + guest + guest_nice; 88 | //cpu3 89 | fin >> tmp >> user >> nice >> system >> cpu3_idle1 90 | >> iowait >> irq >> softirq >> stealstolen >> guest >> guest_nice; 91 | cpu3_total1 = user + nice + system + cpu3_idle1 + iowait + 92 | irq + softirq + stealstolen + guest + guest_nice; 93 | 94 | fin.close(); 95 | 96 | usleep(1000000); 97 | 98 | fin.open("/proc/stat", ios::in); 99 | fin >> tmp >> user >> nice >> system >> idle2 >> iowait >> 100 | irq >>softirq >> stealstolen >> guest >> guest_nice; 101 | total2 = user + nice + system + idle2 + iowait + 102 | irq + softirq + stealstolen + guest + guest_nice; 103 | //cpu0 104 | fin >> tmp >> user >> nice >> system >> cpu0_idle2 105 | >> iowait >> irq >> softirq >> stealstolen >> guest >> guest_nice; 106 | cpu0_total2 = user + nice + system + cpu0_idle2 + iowait + 107 | irq + softirq + stealstolen + guest + guest_nice; 108 | //cpu1 109 | fin >> tmp >> user >> nice >> system >> cpu1_idle2 110 | >> iowait >> irq >> softirq >> stealstolen >> guest >> guest_nice; 111 | cpu1_total2 = user + nice + system + cpu1_idle2 + iowait + 112 | irq + softirq + stealstolen + guest + guest_nice; 113 | //cpu2 114 | fin >> tmp >> user >> nice >> system >> cpu2_idle2 115 | >> iowait >> irq >> softirq >> stealstolen >> guest >> guest_nice; 116 | cpu2_total2 = user + nice + system + cpu2_idle2 + iowait + 117 | irq + softirq + stealstolen + guest + guest_nice; 118 | //cpu3 119 | fin >> tmp >> user >> nice >> system >> cpu3_idle2 120 | >> iowait >> irq >> softirq >> stealstolen >> guest >> guest_nice; 121 | cpu3_total2 = user + nice + system + cpu3_idle2 + iowait + 122 | irq + softirq + stealstolen + guest + guest_nice; 123 | 124 | usage = (total2 + idle1 - total1 - idle2) * 1.0 / (total2 - total1); 125 | ui->progressBar_cpu->setValue(usage * 100); 126 | usage = (cpu0_total2 + cpu0_idle1 - cpu0_total1 - cpu0_idle2) * 1.0 / (cpu0_total2 - cpu0_total1); 127 | ui->progressBar_cpu0->setValue(usage * 100); 128 | usage = (cpu1_total2 + cpu1_idle1 - cpu1_total1 - cpu1_idle2) * 1.0 / (cpu1_total2 - cpu1_total1); 129 | ui->progressBar_cpu1->setValue(usage * 100); 130 | usage = (cpu2_total2 + cpu2_idle1 - cpu2_total1 - cpu2_idle2) * 1.0 / (cpu2_total2 - cpu2_total1); 131 | ui->progressBar_cpu2->setValue(usage * 100); 132 | usage = (cpu3_total2 + cpu3_idle1 - cpu3_total1 - cpu3_idle2) * 1.0 / (cpu3_total2 - cpu3_total1); 133 | ui->progressBar_cpu3->setValue(usage * 100); 134 | 135 | fin.close(); 136 | } 137 | 138 | void TaskManager::UpdateDiskUsage(){ 139 | string str; 140 | int st; 141 | int use1[10],use2[10], count1 = 0, count2 = 0, t = 0; 142 | ifstream fin("/proc/diskstats", ios::in); 143 | while(!fin.eof()){ 144 | fin >> str >> str >> str; 145 | if(str.size() == 3 && str[0] == 's' && str[1] == 'd'){ 146 | for(int j = 0; j < 9; j++) 147 | fin >> str; 148 | fin >> use1[count1++]; 149 | if(count1 == 3) break; 150 | getline(fin, str); 151 | } 152 | else getline(fin, str); 153 | } 154 | fin.close(); 155 | 156 | usleep(1000000); 157 | 158 | fin.open("/proc/diskstats", ios::in); 159 | while(!fin.eof()){ 160 | fin >> str >> str >> str; 161 | if(str.size() == 3 && str[0] == 's' && str[1] == 'd'){ 162 | for(int j = 0; j < 9; j++) 163 | fin >> str; 164 | fin >> use2[count2++]; 165 | if(count2 == 3) break; 166 | getline(fin, str); 167 | } 168 | else getline(fin, str); 169 | } 170 | fin.close(); 171 | 172 | for(int i = 0; i < 3; i++){ 173 | switch(i){ 174 | case 0: 175 | ui->progressBar_disk1->setValue((use2[0] - use1[0]) / 10); 176 | cout << "use2:" << use2[0] << " use1:" << use1[0] << endl; 177 | break; 178 | case 1: 179 | ui->progressBar_disk2->setValue((use2[1] - use1[1]) / 10); 180 | cout << "use2:" << use2[1] << " use1:" << use1[1] << endl; 181 | break; 182 | case 2: 183 | ui->progressBar_disk3->setValue((use2[2] - use1[2]) / 10); 184 | cout << "use2:" << use2[2] << " use1:" << use1[2] << endl; 185 | break; 186 | } 187 | } 188 | } 189 | 190 | 191 | void TaskManager::UpdateProc(int pid){ 192 | string name, stat; 193 | int tmp, nice, priority; 194 | stringstream ss; 195 | ss << pid; 196 | 197 | ifstream fin("/proc/" + ss.str() + "/stat", ios::in); 198 | fin >> tmp >> name; 199 | fin.close(); 200 | 201 | fin.open("/proc/" + ss.str() + "/stat", ios::in); 202 | } 203 | 204 | TaskManager::~TaskManager() 205 | { 206 | delete ui; 207 | delete timer; 208 | } 209 | -------------------------------------------------------------------------------- /ex4/taskmanager/taskmanager.h: -------------------------------------------------------------------------------- 1 | #ifndef TASKMANAGER_H 2 | #define TASKMANAGER_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | using namespace std; 17 | 18 | namespace Ui { 19 | class TaskManager; 20 | } 21 | 22 | class TaskManager : public QWidget 23 | { 24 | Q_OBJECT 25 | 26 | public: 27 | explicit TaskManager(QWidget *parent = nullptr); 28 | ~TaskManager(); 29 | 30 | private: 31 | Ui::TaskManager *ui; 32 | QTimer *timer; 33 | void UpdateProc(int pid); 34 | void UpdateCpuUsage(); 35 | void UpdateMenUsage(); 36 | void UpdateDiskUsage(); 37 | 38 | public slots: 39 | void Init(); 40 | void UpdateUsage(); 41 | }; 42 | 43 | #endif // TASKMANAGER_H 44 | -------------------------------------------------------------------------------- /ex4/taskmanager/taskmanager.pro: -------------------------------------------------------------------------------- 1 | #------------------------------------------------- 2 | # 3 | # Project created by QtCreator 2019-02-12T15:17:24 4 | # 5 | #------------------------------------------------- 6 | 7 | QT += core gui widgets 8 | 9 | TARGET = taskmanager 10 | TEMPLATE = app 11 | 12 | # The following define makes your compiler emit warnings if you use 13 | # any feature of Qt which has been marked as deprecated (the exact warnings 14 | # depend on your compiler). Please consult the documentation of the 15 | # deprecated API in order to know how to port your code away from it. 16 | DEFINES += QT_DEPRECATED_WARNINGS 17 | 18 | # You can also make your code fail to compile if you use deprecated APIs. 19 | # In order to do so, uncomment the following line. 20 | # You can also select to disable deprecated APIs only up to a certain version of Qt. 21 | #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 22 | 23 | CONFIG += c++11 24 | 25 | SOURCES += \ 26 | main.cpp \ 27 | taskmanager.cpp 28 | 29 | HEADERS += \ 30 | taskmanager.h 31 | 32 | FORMS += \ 33 | taskmanager.ui 34 | 35 | # Default rules for deployment. 36 | qnx: target.path = /tmp/$${TARGET}/bin 37 | else: unix:!android: target.path = /opt/$${TARGET}/bin 38 | !isEmpty(target.path): INSTALLS += target 39 | -------------------------------------------------------------------------------- /ex4/taskmanager/taskmanager.pro.user: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | EnvironmentId 7 | {f62a4353-8f54-451e-bc70-247463f9d9d9} 8 | 9 | 10 | ProjectExplorer.Project.ActiveTarget 11 | 0 12 | 13 | 14 | ProjectExplorer.Project.EditorSettings 15 | 16 | true 17 | false 18 | true 19 | 20 | Cpp 21 | 22 | CppGlobal 23 | 24 | 25 | 26 | QmlJS 27 | 28 | QmlJSGlobal 29 | 30 | 31 | 2 32 | UTF-8 33 | false 34 | 4 35 | false 36 | 80 37 | true 38 | true 39 | 1 40 | true 41 | false 42 | 0 43 | true 44 | true 45 | 0 46 | 8 47 | true 48 | 1 49 | true 50 | true 51 | true 52 | false 53 | 54 | 55 | 56 | ProjectExplorer.Project.PluginSettings 57 | 58 | 59 | true 60 | 61 | 62 | 63 | ProjectExplorer.Project.Target.0 64 | 65 | Desktop Qt 5.12.1 GCC 64bit 66 | Desktop Qt 5.12.1 GCC 64bit 67 | qt.qt5.5121.gcc_64_kit 68 | 0 69 | 0 70 | 0 71 | 72 | /home/eric142857/OsCourseDesign/ex4/build-taskmanager-Desktop_Qt_5_12_1_GCC_64bit-Debug 73 | 74 | 75 | true 76 | qmake 77 | 78 | QtProjectManager.QMakeBuildStep 79 | true 80 | 81 | false 82 | false 83 | false 84 | 85 | 86 | true 87 | Make 88 | 89 | Qt4ProjectManager.MakeStep 90 | 91 | false 92 | 93 | 94 | false 95 | 96 | 2 97 | Build 98 | 99 | ProjectExplorer.BuildSteps.Build 100 | 101 | 102 | 103 | true 104 | Make 105 | 106 | Qt4ProjectManager.MakeStep 107 | 108 | true 109 | clean 110 | 111 | false 112 | 113 | 1 114 | Clean 115 | 116 | ProjectExplorer.BuildSteps.Clean 117 | 118 | 2 119 | false 120 | 121 | Debug 122 | Debug 123 | Qt4ProjectManager.Qt4BuildConfiguration 124 | 2 125 | true 126 | 127 | 128 | /home/eric142857/OsCourseDesign/ex4/build-taskmanager-Desktop_Qt_5_12_1_GCC_64bit-Release 129 | 130 | 131 | true 132 | qmake 133 | 134 | QtProjectManager.QMakeBuildStep 135 | false 136 | 137 | false 138 | false 139 | true 140 | 141 | 142 | true 143 | Make 144 | 145 | Qt4ProjectManager.MakeStep 146 | 147 | false 148 | 149 | 150 | false 151 | 152 | 2 153 | Build 154 | 155 | ProjectExplorer.BuildSteps.Build 156 | 157 | 158 | 159 | true 160 | Make 161 | 162 | Qt4ProjectManager.MakeStep 163 | 164 | true 165 | clean 166 | 167 | false 168 | 169 | 1 170 | Clean 171 | 172 | ProjectExplorer.BuildSteps.Clean 173 | 174 | 2 175 | false 176 | 177 | Release 178 | Release 179 | Qt4ProjectManager.Qt4BuildConfiguration 180 | 0 181 | true 182 | 183 | 184 | /home/eric142857/OsCourseDesign/ex4/build-taskmanager-Desktop_Qt_5_12_1_GCC_64bit-Profile 185 | 186 | 187 | true 188 | qmake 189 | 190 | QtProjectManager.QMakeBuildStep 191 | true 192 | 193 | false 194 | true 195 | true 196 | 197 | 198 | true 199 | Make 200 | 201 | Qt4ProjectManager.MakeStep 202 | 203 | false 204 | 205 | 206 | false 207 | 208 | 2 209 | Build 210 | 211 | ProjectExplorer.BuildSteps.Build 212 | 213 | 214 | 215 | true 216 | Make 217 | 218 | Qt4ProjectManager.MakeStep 219 | 220 | true 221 | clean 222 | 223 | false 224 | 225 | 1 226 | Clean 227 | 228 | ProjectExplorer.BuildSteps.Clean 229 | 230 | 2 231 | false 232 | 233 | Profile 234 | Profile 235 | Qt4ProjectManager.Qt4BuildConfiguration 236 | 0 237 | true 238 | 239 | 3 240 | 241 | 242 | 0 243 | 部署 244 | 245 | ProjectExplorer.BuildSteps.Deploy 246 | 247 | 1 248 | Deploy Configuration 249 | 250 | ProjectExplorer.DefaultDeployConfiguration 251 | 252 | 1 253 | 254 | 255 | false 256 | false 257 | 1000 258 | 259 | true 260 | 261 | false 262 | false 263 | false 264 | false 265 | true 266 | 0.01 267 | 10 268 | true 269 | 1 270 | 25 271 | 272 | 1 273 | true 274 | false 275 | true 276 | valgrind 277 | 278 | 0 279 | 1 280 | 2 281 | 3 282 | 4 283 | 5 284 | 6 285 | 7 286 | 8 287 | 9 288 | 10 289 | 11 290 | 12 291 | 13 292 | 14 293 | 294 | 2 295 | 296 | taskmanager 297 | 298 | Qt4ProjectManager.Qt4RunConfiguration:/home/eric142857/OsCourseDesign/ex4/taskmanager/taskmanager.pro 299 | taskmanager.pro 300 | 301 | 3768 302 | false 303 | true 304 | true 305 | false 306 | false 307 | true 308 | 309 | /home/eric142857/OsCourseDesign/ex4/build-taskmanager-Desktop_Qt_5_12_1_GCC_64bit-Debug 310 | 311 | 1 312 | 313 | 314 | 315 | ProjectExplorer.Project.TargetCount 316 | 1 317 | 318 | 319 | ProjectExplorer.Project.Updater.FileVersion 320 | 20 321 | 322 | 323 | Version 324 | 20 325 | 326 | 327 | -------------------------------------------------------------------------------- /ex4/taskmanager/taskmanager.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | TaskManager 4 | 5 | 6 | 7 | 0 8 | 0 9 | 721 10 | 656 11 | 12 | 13 | 14 | TaskManager 15 | 16 | 17 | 18 | 19 | 10 20 | 10 21 | 701 22 | 641 23 | 24 | 25 | 26 | 1 27 | 28 | 29 | 30 | 进程 31 | 32 | 33 | 34 | 35 | 0 36 | 0 37 | 691 38 | 571 39 | 40 | 41 | 42 | 43 | 44 | 45 | 590 46 | 580 47 | 89 48 | 25 49 | 50 | 51 | 52 | 结束进程 53 | 54 | 55 | 56 | 57 | 58 | 性能 59 | 60 | 61 | 62 | 63 | 20 64 | 10 65 | 661 66 | 101 67 | 68 | 69 | 70 | Memory Usage 71 | 72 | 73 | 74 | 75 | 30 76 | 40 77 | 601 78 | 23 79 | 80 | 81 | 82 | 24 83 | 84 | 85 | 86 | 87 | 88 | 40 89 | 70 90 | 241 91 | 17 92 | 93 | 94 | 95 | TextLabel 96 | 97 | 98 | 99 | 100 | 101 | 510 102 | 70 103 | 131 104 | 20 105 | 106 | 107 | 108 | TextLabel 109 | 110 | 111 | 112 | 113 | 114 | 115 | 20 116 | 130 117 | 661 118 | 191 119 | 120 | 121 | 122 | Cpu Usage 123 | 124 | 125 | 126 | 127 | 40 128 | 50 129 | 591 130 | 23 131 | 132 | 133 | 134 | 24 135 | 136 | 137 | 138 | 139 | 140 | 40 141 | 130 142 | 118 143 | 23 144 | 145 | 146 | 147 | 24 148 | 149 | 150 | 151 | 152 | 153 | 190 154 | 130 155 | 118 156 | 23 157 | 158 | 159 | 160 | 24 161 | 162 | 163 | 164 | 165 | 166 | 350 167 | 130 168 | 118 169 | 23 170 | 171 | 172 | 173 | 24 174 | 175 | 176 | 177 | 178 | 179 | 510 180 | 130 181 | 118 182 | 23 183 | 184 | 185 | 186 | 24 187 | 188 | 189 | 190 | 191 | 192 | 90 193 | 160 194 | 67 195 | 17 196 | 197 | 198 | 199 | core0 200 | 201 | 202 | 203 | 204 | 205 | 230 206 | 160 207 | 67 208 | 17 209 | 210 | 211 | 212 | core1 213 | 214 | 215 | 216 | 217 | 218 | 390 219 | 160 220 | 67 221 | 17 222 | 223 | 224 | 225 | core2 226 | 227 | 228 | 229 | 230 | 231 | 540 232 | 160 233 | 67 234 | 17 235 | 236 | 237 | 238 | core3 239 | 240 | 241 | 242 | 243 | 244 | 320 245 | 90 246 | 67 247 | 17 248 | 249 | 250 | 251 | usage 252 | 253 | 254 | 255 | 256 | 257 | 258 | 20 259 | 340 260 | 661 261 | 251 262 | 263 | 264 | 265 | Disk Usage 266 | 267 | 268 | 269 | 270 | 40 271 | 30 272 | 591 273 | 23 274 | 275 | 276 | 277 | 24 278 | 279 | 280 | 281 | 282 | 283 | 310 284 | 60 285 | 67 286 | 17 287 | 288 | 289 | 290 | disk1 291 | 292 | 293 | 294 | 295 | 296 | 310 297 | 140 298 | 67 299 | 17 300 | 301 | 302 | 303 | disk2 304 | 305 | 306 | 307 | 308 | 309 | 40 310 | 100 311 | 591 312 | 23 313 | 314 | 315 | 316 | 24 317 | 318 | 319 | 320 | 321 | 322 | 310 323 | 220 324 | 67 325 | 17 326 | 327 | 328 | 329 | disk3 330 | 331 | 332 | 333 | 334 | 335 | 40 336 | 180 337 | 591 338 | 23 339 | 340 | 341 | 342 | 24 343 | 344 | 345 | 346 | 347 | 348 | 349 | Page 350 | 351 | 352 | 353 | 354 | Page 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | -------------------------------------------------------------------------------- /image/Selection_022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/image/Selection_022.png -------------------------------------------------------------------------------- /image/Selection_023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/image/Selection_023.png -------------------------------------------------------------------------------- /image/Selection_024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/image/Selection_024.png -------------------------------------------------------------------------------- /image/Selection_025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/image/Selection_025.png -------------------------------------------------------------------------------- /image/Selection_026.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/image/Selection_026.png -------------------------------------------------------------------------------- /image/Selection_027.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/image/Selection_027.png -------------------------------------------------------------------------------- /image/Selection_028.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/image/Selection_028.png -------------------------------------------------------------------------------- /image/Selection_029.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/image/Selection_029.png -------------------------------------------------------------------------------- /image/Selection_030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/image/Selection_030.png -------------------------------------------------------------------------------- /image/dmesg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/image/dmesg.png -------------------------------------------------------------------------------- /image/os1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/image/os1.png -------------------------------------------------------------------------------- /image/os4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/image/os4.png -------------------------------------------------------------------------------- /image/sys_h_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/image/sys_h_1.png -------------------------------------------------------------------------------- /image/ui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/image/ui.png -------------------------------------------------------------------------------- /image/ypang@Ubuntu-ypang_ ~-OsCourseDesign_036.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/image/ypang@Ubuntu-ypang_ ~-OsCourseDesign_036.png -------------------------------------------------------------------------------- /image/ypang@Ubuntu-ypang_ ~-compile-linux-4.20.10_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuanyunFeng/OsCourseDesign/26d23557c1143aeaa65ef425f556336598e362a6/image/ypang@Ubuntu-ypang_ ~-compile-linux-4.20.10_001.png --------------------------------------------------------------------------------