:~/c13.03/more$ g++ -o t t.cpp
t.cpp:12:0: 警告: “CLOCKS_PER_SEC”重定义 [默认启用]
/usr/include/x86_64-linux-gnu/bits/time.h:49:0: 附注: 这是先前定义的位置
t.cpp: 在函数‘int main(int, const char**)’中:
t.cpp:32:111: 错误: 对‘std::basic_ofstream<char>::open(std::basic_string<char>, std::_Ios_Openmode)’的调用没有匹配的函数
t.cpp:32:111: 附注: 备选是:
/usr/include/c++/4.6/fstream:702:7: 附注: void std::basic_ofstream<_CharT, _Traits>::open(const char*, std::ios_base::openmode) [with _CharT = char, _Traits = std::char_traits<char>, std::ios_base::openmode = std::_Ios_Openmode]
/usr/include/c++/4.6/fstream:702:7: 附注: no known conversion for argument 1 from ‘std::basic_string<char>’ to ‘const char*’
我的源代码出错的open函数:
fout.open("/home/wangwenyu/c13.03/more"+filename+".in",std::ofstream::out | std::ofstream::app);
fout<<"title typical input stream"<<endl;
我主要是想创建这么一个文件然后在里面写东西。。。
è¿è¡ gcc/egcs
*
gcc/egcs ç主è¦é项
*
gdb
*
gdb ç常ç¨å½ä»¤
*
gdb 使ç¨èä¾
*
å ¶ä»ç¨åº/åºå·¥å · (ar, objdump, nm, size, strings, strip, ...)
* å建å使ç¨éæåº
* å建å使ç¨å ±äº«åº
* 使ç¨é«çº§å ±äº«åºç¹æ§
1.7.1 è¿è¡ gcc/egcs
Linux ä¸æéè¦ç软件å¼åå·¥å ·æ¯ GCCãGCC æ¯ GNU ç C å C++ ç¼è¯å¨ãå®é ä¸ï¼GCC è½å¤ç¼è¯ä¸ç§è¯è¨ï¼CãC++ å Object Cï¼C è¯è¨çä¸ç§é¢å对象æ©å±ï¼ãå©ç¨ gcc å½ä»¤å¯åæ¶ç¼è¯å¹¶è¿æ¥ C å C++ æºç¨åºã
#DEMO#: hello.c
å¦æä½ æ两个æå°æ°å 个 C æºæ件ï¼ä¹å¯ä»¥æ¹ä¾¿å°å©ç¨ GCC ç¼è¯ãè¿æ¥å¹¶çæå¯æ§è¡æ件ãä¾å¦ï¼åè®¾ä½ æ两个æºæ件 main.c å factorial.c 两个æºæ件ï¼ç°å¨è¦ç¼è¯çæä¸ä¸ªè®¡ç®é¶ä¹çç¨åºã
-----------------------
æ¸ å factorial.c
-----------------------
#include <stdio.h>
#include <stdlib.h>
int factorial (int n)
{
if (n <= 1)
return 1;
else
return factorial (n - 1) * n;
}
-----------------------
-----------------------
æ¸ å main.c
-----------------------
#include <stdio.h>
#include <stdlib.h>
int factorial (int n);
int main (int argc, char **argv)
{
int n;
if (argc < 2) {
printf ("Usage: %s n\n", argv [0]);
return -1;
}
else {
n = atoi (argv[1]);
printf ("Factorial of %d is %d.\n", n, factorial (n));
}
return 0;
}
-----------------------
å©ç¨å¦ä¸çå½ä»¤å¯ç¼è¯çæå¯æ§è¡æ件ï¼å¹¶æ§è¡ç¨åºï¼
$ gcc -o factorial main.c factorial.c
$ ./factorial 5
Factorial of 5 is 120.
GCC å¯åæ¶ç¨æ¥ç¼è¯ C ç¨åºå C++ ç¨åºãä¸è¬æ¥è¯´ï¼C ç¼è¯å¨éè¿æºæ件çåç¼åæ¥å¤ææ¯ C ç¨åºè¿æ¯ C++ ç¨åºãå¨ Linux ä¸ï¼C æºæ件çåç¼å为 .cï¼è C++ æºæ件çåç¼å为 .C æ .cppã
ä½æ¯ï¼gcc å½ä»¤åªè½ç¼è¯ C++ æºæ件ï¼èä¸è½èªå¨å C++ ç¨åºä½¿ç¨çåºè¿æ¥ãå æ¤ï¼éå¸¸ä½¿ç¨ g++ å½ä»¤æ¥å®æ C++ ç¨åºçç¼è¯åè¿æ¥ï¼è¯¥ç¨åºä¼èªå¨è°ç¨ gcc å®ç°ç¼è¯ãå设æ们æä¸ä¸ªå¦ä¸ç C++ æºæ件ï¼hello.Cï¼ï¼
#include <iostream.h>
void main (void)
{
cout << "Hello, world!" << endl;
}
åå¯ä»¥å¦ä¸è°ç¨ g++ å½ä»¤ç¼è¯ãè¿æ¥å¹¶çæå¯æ§è¡æ件ï¼
$ g++ -o hello hello.C
$ ./hello
Hello, world!
1.7.2 gcc/egcs ç主è¦é项
表 1-3 gcc å½ä»¤ç常ç¨é项
é项 解é
-ansi åªæ¯æ ANSI æ åç C è¯æ³ãè¿ä¸é项å°ç¦æ¢ GNU C çæäºç¹è²ï¼
ä¾å¦ asm æ typeof å ³é®è¯ã
-c åªç¼è¯å¹¶çæç®æ æ件ã
-DMACRO 以å符串â1âå®ä¹ MACRO å®ã
-DMACRO=DEFN 以å符串âDEFNâå®ä¹ MACRO å®ã
-E åªè¿è¡ C é¢ç¼è¯å¨ã
-g çæè°è¯ä¿¡æ¯ãGNU è°è¯å¨å¯å©ç¨è¯¥ä¿¡æ¯ã
-IDIRECTORY æå®é¢å¤ç头æ件æ索路å¾DIRECTORYã
-LDIRECTORY æå®é¢å¤çå½æ°åºæ索路å¾DIRECTORYã
-lLIBRARY è¿æ¥æ¶æç´¢æå®çå½æ°åºLIBRARYã
-m486 é对 486 è¿è¡ä»£ç ä¼åã
-o FILE çææå®çè¾åºæ件ãç¨å¨çæå¯æ§è¡æ件æ¶ã
-O0 ä¸è¿è¡ä¼åå¤çã
-O æ -O1 ä¼åçæ代ç ã
-O2 è¿ä¸æ¥ä¼åã
-O3 æ¯ -O2 æ´è¿ä¸æ¥ä¼åï¼å æ¬ inline å½æ°ã
-shared çæå ±äº«ç®æ æ件ãé常ç¨å¨å»ºç«å ±äº«åºæ¶ã
-static ç¦æ¢ä½¿ç¨å ±äº«è¿æ¥ã
-UMACRO åæ¶å¯¹ MACRO å®çå®ä¹ã
-w ä¸çæä»»ä½è¦åä¿¡æ¯ã
-Wall çæææè¦åä¿¡æ¯ã
#DEMO#
MiniGUI çç¼è¯é项
1.7.3 gdb
GNU çè°è¯å¨ç§°ä¸º gdbï¼è¯¥ç¨åºæ¯ä¸ä¸ªäº¤äºå¼å·¥å ·ï¼å·¥ä½å¨å符模å¼ãå¨ X Window ç³»ç»ä¸ï¼
æä¸ä¸ª gdb çå端å¾å½¢å·¥å ·ï¼ç§°ä¸º xxgdbãgdb æ¯åè½å¼ºå¤§çè°è¯ç¨åºï¼å¯å®æå¦ä¸çè°è¯
ä»»å¡ï¼
* 设置æç¹ï¼
* çè§ç¨åºåéçå¼ï¼
* ç¨åºçåæ¥æ§è¡ï¼
* ä¿®æ¹åéçå¼ã
å¨å¯ä»¥ä½¿ç¨ gdb è°è¯ç¨åºä¹åï¼å¿ é¡»ä½¿ç¨ -g é项ç¼è¯æºæ件ãå¯å¨ makefile ä¸å¦ä¸å®ä¹
CFLAGS åéï¼
CFLAGS = -g
è¿è¡ gdb è°è¯ç¨åºæ¶é常使ç¨å¦ä¸çå½ä»¤ï¼
gdb progname
å¨ gdb æ示符å¤é®å ¥helpï¼å°ååºå½ä»¤çåç±»ï¼ä¸»è¦çåç±»æï¼
* aliasesï¼å½ä»¤å«å
* breakpointsï¼æç¹å®ä¹ï¼
* dataï¼æ°æ®æ¥çï¼
* filesï¼æå®å¹¶æ¥çæ件ï¼
* internalsï¼ç»´æ¤å½ä»¤ï¼
* runningï¼ç¨åºæ§è¡ï¼
* stackï¼è°ç¨æ æ¥çï¼
* statuï¼ç¶ææ¥çï¼
* tracepointsï¼è·è¸ªç¨åºæ§è¡ã
é®å ¥ help åè·å½ä»¤çåç±»åï¼å¯è·å¾è¯¥ç±»å½ä»¤ç详ç»æ¸ åã
#DENO#
1.7.4 gdb ç常ç¨å½ä»¤
表 1-4 常ç¨ç gdb å½ä»¤
å½ä»¤ 解é
break NUM å¨æå®çè¡ä¸è®¾ç½®æç¹ã
bt æ¾ç¤ºææçè°ç¨æ 帧ã该å½ä»¤å¯ç¨æ¥æ¾ç¤ºå½æ°çè°ç¨é¡ºåºã
clear å é¤è®¾ç½®å¨ç¹å®æºæ件ãç¹å®è¡ä¸çæç¹ãå ¶ç¨æ³ä¸ºï¼clear FILENAME:NUMã
continue 继ç»æ§è¡æ£å¨è°è¯çç¨åºã该å½ä»¤ç¨å¨ç¨åºç±äºå¤çä¿¡å·ææç¹è
导è´åæ¢è¿è¡æ¶ã
display EXPR æ¯æ¬¡ç¨åºåæ¢åæ¾ç¤ºè¡¨è¾¾å¼çå¼ã表达å¼ç±ç¨åºå®ä¹çåéç»æã
file FILE è£ è½½æå®çå¯æ§è¡æ件è¿è¡è°è¯ã
help NAME æ¾ç¤ºæå®å½ä»¤ç帮å©ä¿¡æ¯ã
info break æ¾ç¤ºå½åæç¹æ¸ åï¼å æ¬å°è¾¾æç¹å¤ç次æ°çã
info files æ¾ç¤ºè¢«è°è¯æ件ç详ç»ä¿¡æ¯ã
info func æ¾ç¤ºææçå½æ°å称ã
info local æ¾ç¤ºå½å½æ°ä¸çå±é¨åéä¿¡æ¯ã
info prog æ¾ç¤ºè¢«è°è¯ç¨åºçæ§è¡ç¶æã
info var æ¾ç¤ºææçå ¨å±åéæåéå称ã
kill ç»æ¢æ£è¢«è°è¯çç¨åºã
list æ¾ç¤ºæºä»£ç 段ã
make å¨ä¸éåº gdb çæ åµä¸è¿è¡ make å·¥å ·ã
next å¨ä¸åæ¥æ§è¡è¿å ¥å ¶ä»å½æ°çæ åµä¸ï¼ååæ§è¡ä¸è¡æºä»£ç ã
print EXPR æ¾ç¤ºè¡¨è¾¾å¼ EXPR çå¼ã
1.7.5 gdb 使ç¨èä¾
-----------------
æ¸ å ä¸ä¸ªæé误ç C æºç¨åº bugging.c
-----------------
#include <stdio.h>
#include <stdlib.h>
static char buff [256];
static char* string;
int main ()
{
printf ("Please input a string: ");
gets (string);
printf ("\nYour string is: %s\n", string);
}
-----------------
ä¸é¢è¿ä¸ªç¨åºé常ç®åï¼å ¶ç®çæ¯æ¥åç¨æ·çè¾å ¥ï¼ç¶åå°ç¨æ·çè¾å ¥æå°åºæ¥ã该ç¨åºä½¿ç¨äº
ä¸ä¸ªæªç»è¿åå§åçå符串å°å stringï¼å æ¤ï¼ç¼è¯å¹¶è¿è¡ä¹åï¼å°åºç° Segment Fault é误ï¼
$ gcc -o test -g test.c
$ ./test
Please input a string: asfd
Segmentation fault (core dumped)
为äºæ¥æ¾è¯¥ç¨åºä¸åºç°çé®é¢ï¼æ们å©ç¨ gdbï¼å¹¶æå¦ä¸çæ¥éª¤è¿è¡ï¼
1ï¼è¿è¡ gdb bugging å½ä»¤ï¼è£ å ¥ bugging å¯æ§è¡æ件ï¼
2ï¼æ§è¡è£ å ¥ç bugging å½ä»¤ï¼
3ï¼ä½¿ç¨ where å½ä»¤æ¥çç¨åºåºéçå°æ¹ï¼
4ï¼å©ç¨ list å½ä»¤æ¥çè°ç¨ gets å½æ°éè¿ç代ç ï¼
5ï¼å¯ä¸è½å¤å¯¼è´ gets å½æ°åºéçå ç´ å°±æ¯åé stringãç¨ print å½ä»¤æ¥ç string çå¼ï¼
6ï¼å¨ gdb ä¸ï¼æ们å¯ä»¥ç´æ¥ä¿®æ¹åéçå¼ï¼åªè¦å° string åä¸ä¸ªåæ³çæéå¼å°±å¯ä»¥äºï¼ä¸º
æ¤ï¼æ们å¨ç¬¬ 11 è¡å¤è®¾ç½®æç¹ï¼
7ï¼ç¨åºéæ°è¿è¡å°ç¬¬ 11 è¡å¤åæ¢ï¼è¿æ¶ï¼æ们å¯ä»¥ç¨ set variable å½ä»¤ä¿®æ¹ string çåå¼ï¼
8ï¼ç¶å继ç»è¿è¡ï¼å°çå°æ£ç¡®çç¨åºè¿è¡ç»æã
#DEMO#
1.7.6 å ¶ä»ç¨åº/åºå·¥å ·
stripï¼
nmï¼
sizeï¼
stringï¼
1.7.7 å建å使ç¨éæåº
å建ä¸ä¸ªéæåºæ¯ç¸å½ç®åçãéå¸¸ä½¿ç¨ ar ç¨åºæä¸äºç®æ æ件ï¼.oï¼ç»åå¨ä¸èµ·ï¼æ为ä¸ä¸ªåç¬çåºï¼ç¶åè¿è¡ ranlibï¼ä»¥ç»åºå å ¥ä¸äºç´¢å¼ä¿¡æ¯ã
1.7.8 å建å使ç¨å ±äº«åº
ç¹æ®çç¼è¯åè¿æ¥é项
-D_REENTRANT 使å¾é¢å¤çå¨ç¬¦å· _REENTRANT 被å®ä¹ï¼è¿ä¸ªç¬¦å·æ¿æ´»ä¸äºå®ç¹æ§ã
-fPIC é项产çä½ç½®ç¬ç«ç代ç ãç±äºåºæ¯å¨è¿è¡çæ¶å被è°å ¥ï¼å æ¤è¿ä¸ª
é项æ¯å¿ éçï¼å 为å¨ç¼è¯çæ¶åï¼è£ å ¥å åçå°åè¿ä¸ç¥éãå¦æ
ä¸ä½¿ç¨è¿ä¸ªé项ï¼åºæ件å¯è½ä¸ä¼æ£ç¡®è¿è¡ã
-shared é项åè¯ç¼è¯å¨äº§çå ±äº«åºä»£ç ã
-Wl,-soname -Wl åè¯ç¼è¯å¨å°åé¢çåæ°ä¼ éå°è¿æ¥å¨ãè -soname æå®äº
å ±äº«åºç sonameã
ï¼ å¯ä»¥æåºæ件æ·è´å° /etc/ld.so.conf ä¸å举åºçä»»ä½ç®å½ä¸ï¼å¹¶ä»¥
root 身份è¿è¡ ldconfigï¼æè
ï¼ è¿è¡ export LD_LIBRARY_PATH='pwd'ï¼å®æå½åè·¯å¾å å°åºæ索路å¾ä¸å»ã
1.7.9 使ç¨é«çº§å ±äº«åºç¹æ§
1. ldd å·¥å ·
ldd ç¨æ¥æ¾ç¤ºæ§è¡æ件éè¦åªäºå ±äº«åº, å ±äº«åºè£ 载管çå¨å¨åªéæ¾å°äºéè¦çå ±äº«åº.
2. soname
å ±äº«åºçä¸ä¸ªé常éè¦çï¼ä¹æ¯é常é¾çæ¦å¿µæ¯ sonameââç®åå ±äº«ç®æ åï¼short for shared object nameï¼ãè¿æ¯ä¸ä¸ªä¸ºå ±äº«åºï¼.soï¼æ件èå åµå¨æ§å¶æ°æ®ä¸çååãå¦åé¢æå°çï¼æ¯ä¸ä¸ªç¨åºé½æä¸ä¸ªéè¦ä½¿ç¨çåºçæ¸ åãè¿ä¸ªæ¸ åçå 容æ¯ä¸ç³»ååºç sonameï¼å¦å ldd æ¾ç¤ºçé£æ ·ï¼å ±äº«åºè£ è½½å¨å¿ é¡»æ¾å°è¿ä¸ªæ¸ åã
soname çå ³é®åè½æ¯å®æä¾äºå ¼å®¹æ§çæ åãå½è¦å级系ç»ä¸çä¸ä¸ªåºæ¶ï¼å¹¶ä¸æ°åºç soname åèçåºç soname ä¸æ ·ï¼ç¨æ§åºè¿æ¥çæçç¨åºï¼ä½¿ç¨æ°çåºä¾ç¶è½æ£å¸¸è¿è¡ãè¿ä¸ªç¹æ§ä½¿å¾å¨ Linux ä¸ï¼å级使ç¨å ±äº«åºçç¨åºåå®ä½é误åå¾åå容æã
å¨ Linux ä¸ï¼åºç¨ç¨åºéè¿ä½¿ç¨ sonameï¼æ¥æå®æå¸æåºççæ¬ãåºä½è ä¹å¯ä»¥éè¿ä¿çæè æ¹å soname æ¥å£°æï¼åªäºçæ¬æ¯ç¸äºå ¼å®¹çï¼è¿ä½¿å¾ç¨åºåæè±äºå ±äº«åºçæ¬å²çªé®é¢çå°æ°ã
æ¥ç/usr/local/lib ç®å½ï¼åæ MiniGUI çå ±äº«åºæ件ä¹é´çå ³ç³»
3. å ±äº«åºè£ è½½å¨
å½ç¨åºè¢«è°ç¨çæ¶åï¼Linux å ±äº«åºè£ è½½å¨ï¼ä¹è¢«ç§°ä¸ºå¨æè¿æ¥å¨ï¼ä¹èªå¨è¢«è°ç¨ãå®çä½ç¨æ¯ä¿è¯ç¨åºæéè¦çææéå½çæ¬çåºé½è¢«è°å ¥å åãå ±äº«åºè£ è½½å¨ååæ¯ ld.so æè æ¯ ld-linux.soï¼è¿åå³äº Linux libc ççæ¬ï¼å®å¿ 须使ç¨ä¸ç¹å¤é¨äº¤äºï¼æè½å®æèªå·±çå·¥ä½ãç¶èå®æ¥åå¨ç¯å¢åéåé ç½®æ件ä¸çé 置信æ¯ã
æ件 /etc/ld.so.conf å®ä¹äºæ åç³»ç»åºçè·¯å¾ãå ±äº«åºè£ è½½å¨æå®ä½ä¸ºæ索路å¾ã为äºæ¹åè¿ä¸ªè®¾ç½®ï¼å¿ 须以 root 身份è¿è¡ ldconfig å·¥å ·ãè¿å°æ´æ° /etc/ls.so.cache æ件ï¼è¿ä¸ªæä»¶å ¶å®æ¯è£ è½½å¨å é¨ä½¿ç¨çæ件ä¹ä¸ã
å¯ä»¥ä½¿ç¨è®¸å¤ç¯å¢åéæ§å¶å ±äº«åºè£ è½½å¨çæä½ï¼è¡¨1-4+ï¼ã
表 1-4+ å ±äº«åºè£ è½½å¨ç¯å¢åé
åé å«ä¹
LD_AOUT_LIBRARY_PATH é¤äºä¸ä½¿ç¨ a.out äºè¿å¶æ ¼å¼å¤ï¼ä¸ LD_LIBRARY_PATH ç¸åã
LD_AOUT_PRELOAD é¤äºä¸ä½¿ç¨ a.out äºè¿å¶æ ¼å¼å¤ï¼ä¸ LD_PRELOAD ç¸åã
LD_KEEPDIR åªéç¨äº a.out åºï¼å¿½ç¥ç±å®ä»¬æå®çç®å½ã
LD_LIBRARY_PATH å°å ¶ä»ç®å½å å ¥åºæ索路å¾ãå®çå 容åºè¯¥æ¯ç±åå·
åéçç®å½å表ï¼ä¸å¯æ§è¡æ件ç PATH åéå ·æç¸åçæ ¼å¼ã
å¦æè°ç¨è®¾ç½®ç¨æ· ID æè è¿ç¨ ID çç¨åºï¼è¯¥åé被忽ç¥ã
LD_NOWARN åªéç¨äº a.out åºï¼å½æ¹åçæ¬å·æ¯ï¼ååºè¦åä¿¡æ¯ã
LD_PRELOAD é¦å è£ å ¥ç¨æ·å®ä¹çåºï¼ä½¿å¾å®ä»¬ææºä¼è¦çæè éæ°å®ä¹æ ååºã
使ç¨ç©ºæ ¼åå¼å¤ä¸ªå ¥å£ã对äºè®¾ç½®ç¨æ· ID æè è¿ç¨ ID çç¨åºï¼
åªæ被æ è®°è¿çåºæ被é¦å è£ å ¥ãå¨ /etc/ld.so.perload ä¸æå®
äºå ¨å±çæ¬å·ï¼è¯¥æ件ä¸éµå®è¿ä¸ªéå¶ã
4. ä½¿ç¨ dlopen
å¦å¤ä¸ä¸ªå¼ºå¤§çåºå½æ°æ¯ dlopen()ã该å½æ°å°æå¼ä¸ä¸ªæ°åºï¼å¹¶æå®è£ å ¥å åã该å½æ°ä¸»è¦ç¨æ¥å è½½åºä¸ç符å·ï¼è¿äºç¬¦å·å¨ç¼è¯çæ¶åæ¯ä¸ç¥éçãæ¯å¦ Apache Web æå¡å¨å©ç¨è¿ä¸ªå½æ°å¨è¿è¡è¿ç¨ä¸å 载模åï¼è¿ä¸ºå®æä¾äºé¢å¤çè½åãä¸ä¸ªé ç½®æ件æ§å¶äºå 载模åçè¿ç¨ãè¿ç§æºå¶ä½¿å¾å¨ç³»ç»ä¸æ·»å æè å é¤ä¸ä¸ªæ¨¡åæ¶ï¼é½ä¸éè¦éæ°ç¼è¯äºã
å¯ä»¥å¨èªå·±çç¨åºä¸ä½¿ç¨ dlopen()ãdlopen() å¨ dlfcn.h ä¸å®ä¹ï¼å¹¶å¨ dl åºä¸å®ç°ãå®éè¦ä¸¤ä¸ªåæ°ï¼ä¸ä¸ªæ件ååä¸ä¸ªæ å¿ãæ件åå¯ä»¥æ¯æ们å¦ä¹ è¿çåºä¸ç sonameãæ å¿æææ¯å¦ç«å»è®¡ç®åºçä¾èµæ§ãå¦æ设置为 RTLD_NOW çè¯ï¼åç«å»è®¡ç®ï¼å¦æ设置çæ¯ RTLD_LAZYï¼åå¨éè¦çæ¶åæ计ç®ãå¦å¤ï¼å¯ä»¥æå® RTLD_GLOBALï¼å®ä½¿å¾é£äºå¨ä»¥åæå è½½çåºå¯ä»¥è·å¾å ¶ä¸ç符å·ã
å½åºè¢«è£ å ¥åï¼å¯ä»¥æ dlopen() è¿åçå¥æä½ä¸ºç» dlsym() ç第ä¸ä¸ªåæ°ï¼ä»¥è·å¾ç¬¦å·å¨åºä¸çå°åã使ç¨è¿ä¸ªå°åï¼å°±å¯ä»¥è·å¾åºä¸ç¹å®å½æ°çæéï¼å¹¶ä¸è°ç¨è£ è½½åºä¸çç¸åºå½æ°ã
2,你在open之前,单独创建一个string对象,把文件名保存好;
string fullname = "/home/wangwenyu/c13.03/more" + filename + ".in" ;
然后再去调用 fout.open本回答被提问者和网友采纳