??xml version="1.0" encoding="utf-8" standalone="yes"?>怡红院av在线,日本一区二区中文字幕,欧美一级日韩一级 http://www.aygfsteel.com/lihao336/category/47963.html成于坚忍Q毁于Qw?/description>zh-cn Wed, 14 Dec 2011 00:28:04 GMT Wed, 14 Dec 2011 00:28:04 GMT 60 [转]unix/linux中的dup()pȝ调用 http://www.aygfsteel.com/lihao336/archive/2011/12/13/366231.htmlcalvin calvin Tue, 13 Dec 2011 06:20:00 GMT http://www.aygfsteel.com/lihao336/archive/2011/12/13/366231.html http://www.aygfsteel.com/lihao336/comments/366231.html http://www.aygfsteel.com/lihao336/archive/2011/12/13/366231.html#Feedback 0 http://www.aygfsteel.com/lihao336/comments/commentRss/366231.html http://www.aygfsteel.com/lihao336/services/trackbacks/366231.html sys_dup()的主要工作就是用来“复制”一个打开的文件号Q两个文g号都指向同一个文件。既然说单,我们首先来看一下它的代码(定义在fs/fcntl.c中)Q?br /> 1 asmlinkage long sys_dup(unsigned int fildes) 2 { 3 int ret = - EBADF; 4 struct file * file = fget(fildes); 5 6 if (file) 7 ret = dupfd(file, 0 ); 8 return ret; 9 } 10
而sys_dup()的主体是dupfd()Q定义在同一个文件中Q: 1 static int dupfd( struct file * file, int start) 2 { 3 struct files_struct * files = current -> files; 4 int ret; 5 6 ret = locate_fd(files, file, start); 7 if (ret < 0 ) 8 goto out_putf; 9 allocate_fd(files, file, ret); 10 return ret; 11 12 out_putf: 13 write_unlock( & files -> file_lock); 14 fput(file); 15 return ret; 16 } 17
注:dup和dup2的原型如下: #include <unistd.h> int dup(int file_descriptor); int dup2(int file_descriptor1, int file_descriptor2) dupq回的文件描q符L取最的可用?br />dup2q回的文件描q符或者与file_descriptor2相同Q或者是W一个大于该参数的可用倹{?/font> 而这么一个简单的pȝ调用是如何完成重定向q个艰巨的Q务的呢?我们不妨先看个例子?br />
当我们在shell下输入如下命令:“echo
hello!”,q条命o要求shellq程执行一个可执行文gechoQ参Cؓ“hello!”。当shell接收到命令之后,先找?
bin/echoQ然后fork()Z个子q程让他执行bin/echoQƈ参C递给它,而这个进E从shelll承了三个标准文Ӟx准输?
QstdinQ,标准输出QstdoutQ和标准出错信息QstderrQ,他们三个的文件号分别????/font>而至于echoq程的工作很单,是参数“hello!”写到标准输出文件中去,通常都是我们的显C器上。但是如果我们将命oҎ“echo hello! >
foo”,则在执行时输出将会被重定向到盘文gfoo?font color="#0000FF">Q注Q重定向于文件描q符有关Q?/font>。我们假定在此之前该shellq程只有三个标准文g打开Q文件号分别???Q以上命令行按如下序列执行Q?br /> (1) 打开或创建磁盘文件fooQ如果foo中原来有内容Q则清除原来内容Q其文g号ؓ3?br /> (2) 通过dup()复制文gstdoutQ即文件号1出的filel构指针复制到文件号4处,目的是将stdout的file指针暂时保存一?br /> (3) 关闭stdoutQ即1hӞ但是׃4h件对stdout也同时有个引用,所以stdout文gq未真正关闭Q只是腾?h件号位置?br /> (4) 通过dup()Q复?hӞ即磁盘文件fooQ,׃1h件关闭,其位|空~,?h件被复制?P卌E中原来指向stdout的指针指向了foo?br />
(5)
通过pȝ调用fork()和exec()创徏子进Eƈ执行echoQ子q程在执行echo前夕关闭3号和4hӞ只留???三个文gQ请注意Q这
时的1h件已l不是stdout而是盘文gfoo了。当echo惛_stdout文g写入“hello!”时自然写入到了foo中?br /> (6) 回到shell后,关闭指向foo?号与3h件文Ӟ再用dup()和close()?h复至stdoutQ这样shell恢复了0??三个标准输入/输出文g?br />
由此可见Q?font color="#FF0000">当echoE序Q或其他Q在q行的时候ƈ不知道stdoutQ对于stdin和stderr同样Q指向什么,q程与实际输出文件或讑֤的结合是在运行时由其父进E“包办”的。这样就化了子进E的E序设计Q因为在设计时只要跟三个逻辑上存在的文g打交道就可以?/font>。可能有Z觉得q很像面向对象中
的多态和重蝲Q没有什么新奇之处,但是如果你活?0甚至40q前Q可能你会改变你的看法。?
]]> 端存储和大端存?/title> http://www.aygfsteel.com/lihao336/archive/2011/11/15/363850.htmlcalvin calvin Tue, 15 Nov 2011 07:36:00 GMT http://www.aygfsteel.com/lihao336/archive/2011/11/15/363850.html http://www.aygfsteel.com/lihao336/comments/363850.html http://www.aygfsteel.com/lihao336/archive/2011/11/15/363850.html#Feedback 0 http://www.aygfsteel.com/lihao336/comments/commentRss/363850.html http://www.aygfsteel.com/lihao336/services/trackbacks/363850.html 判断端q是大端规则的方法:
int x = 1;if(*(char *)&x == 1)//取x指针强制转换为char*cd再取|此时取到的值是int最低字节?br /> printf(“little-endian\n?;else printf(“big-endian\n?;
另外补充Q?/wbr>
1QBIG-ENDIAN、LITTLE-ENDIAN、跟CPU有关的,每一UCPU不是BIG-ENDIAN是LITTLE-
ENDIAN、。IA架构的CPU中是Little-EndianQ而PowerPC
、SPARC和Motorola处理器。这其实是所谓的L字节序。而网l字节序是指数据在网l上传输时是大头q是头的,在Internet的网l字
节序是BIG-ENDIAN。所谓的JAVA字节序指的是在JAVA虚拟Z多字节类型数据的存放序QJAVA字节序也是BIG-ENDIAN?/p>
2Q所以在用C/C++写通信E序Ӟ在发送数据前务必用htonl和htonsL整型和短整型的数据进行从L字节序到|络字节序的转换Q而接
收数据后对于整型和短整型数据则必调用ntohl和ntohs实现从网l字节序C机字节序的{换。如果通信的一ҎJAVAE序、一ҎC/C++E?
序时Q则需要在C/C++一侧用以上几个方法进行字节序的{换,而JAVA一侧,则不需要做M处理Q因为JAVA字节序与|络字节序都是BIG-
ENDIANQ只要C/C++一侧能正确q行转换卛_Q发送前从主机序到网l序Q接收时反变换)。如果通信的双斚w是JAVAQ则Ҏ不用考虑字节序的?
题了?/p>
转自http://www.embest.net/index.php/archives/259
]]>socket端口bind问题 http://www.aygfsteel.com/lihao336/archive/2011/09/11/358464.htmlcalvin calvin Sun, 11 Sep 2011 15:47:00 GMT http://www.aygfsteel.com/lihao336/archive/2011/09/11/358464.html http://www.aygfsteel.com/lihao336/comments/358464.html http://www.aygfsteel.com/lihao336/archive/2011/09/11/358464.html#Feedback 0 http://www.aygfsteel.com/lihao336/comments/commentRss/358464.html http://www.aygfsteel.com/lihao336/services/trackbacks/358464.html $ netstat -tln Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:40700 0.0.0.0:* LISTEN tcp6 0 0 ::1:631 :::* LISTEN 昄没bind?3端口Q却bindC一个随机的端口40700上?br />后来忽然意识?-1023是保留端口号Q是不是因ؓ13属于reserved port的原因? 修改bind端口?000后,果然可以bind了?br /> 原来1-1023是reserved port是以q种方式实现的,而以root权限q行E序Q则可以bind?023以下的端口?br /> q篇文章不错的:http://www.cnblogs.com/zhangleiccst/archive/2011/05/14/2046465.html ]]> [转]sprintf snprintf strcpy memcpy 区别及应?/title> http://www.aygfsteel.com/lihao336/archive/2011/09/11/358442.htmlcalvin calvin Sun, 11 Sep 2011 06:45:00 GMT http://www.aygfsteel.com/lihao336/archive/2011/09/11/358442.html http://www.aygfsteel.com/lihao336/comments/358442.html http://www.aygfsteel.com/lihao336/archive/2011/09/11/358442.html#Feedback 0 http://www.aygfsteel.com/lihao336/comments/commentRss/358442.html http://www.aygfsteel.com/lihao336/services/trackbacks/358442.html 关于sprintf和snprintf的正?br />
考虑以下有缺L例子Q?br />
void f(const char *p)
{
char buf[11]={0};
sprintf(buf,"%10s",p); // very dangerous
printf("%sn",buf);
}
不要让格式标记?10s”误g。如果p的长度大?0个字W,那么 sprintf() 的写操作׃过buf的边界,从而生一个缓冲区溢出?br />
这cȝ陷ƈ不容易,因ؓ它们只在 p 的长度大?0个字W的时候才会发生。黑客通常利用q类脆弱的代码来入R看上d全的pȝ?br />
要修正这一~陷Q?b>可以使用函数 snprintf()代替函数sprintf()?br />
函数原型Qint snprintf(char *dest, size_t n, const char *fmt, ...);
函数说明: 最多从源串中拷贝nQ?个字W到目标串中Q然后再在后面加一?。所以如果目标串的大ؓn的话Q将不会溢出?br />
函数q回? 若成功则q回存入数组的字W数Q若~码出错则返回负倹{?br />
推荐的用法:
void f(const char *p)
{
char buf[11]={0};
snprintf(buf, sizeof(buf), "%10s", p); // 注意Q这里第2个参数应当用sizeof(str)Q而不要用硬~码11Q也不应当用sizeof(str)-1?0
printf("%sn",buf);
}
strcpy 函数操作的对象是 字符?/font>Q完?? 源字W串 ?目的字符??拯 功能?br />
snprintf 函数操作的对?不限于字W串 Q虽然目的对象是字符Ԍ但是源对象可以是字符丌Ӏ也可以是Q意基本类型的数据。这个函C要用来实?Q字W串或基本数据类型)?字符?的{?/font>功能。如果源对象是字W串Qƈ且指?%s 格式W,也可实现字符串拷贝功能?br />
memcpy 函数思义是 内存拯 Q实?一? 内存?的内容复制到另一?内存?/font> q一功能。内存块由其首地址以及长度定。程序中出现的实体对象,不论是什么类型,其最l表现就是在内存中占据一席之圎ͼ一个内存区间或块)。因此,memcpy 的操作对象不局限于某一cL据类型,或者说?适用于Q意数据类?/font>Q只要能l出对象的v始地址和内存长度信息、ƈ且对象具有可操作性即可。鉴?memcpy 函数{长拯的特点以及数据类型代表的物理意义Qmemcpy 函数通常限于同种cd数据或对象之间的拯Q其中当然也包括字符串拷贝以及基本数据类型的拯?br />
对于字符串拷贝来_用上qC个函数都可以实现Q但是其实现的效率和使用的方便程度不同:strcpy 无疑是最合适的选择Q效率高且调用方ѝ?/li> snprintf 要额外指定格式符q且q行格式转化Q麻烦且效率不高?/li> memcpy
虽然高效Q但是需要额外提供拷贝的内存长度q一参数Q易错且使用不便Qƈ且如果长度指定过大的话(最优长度是源字W串长度 +
1Q,q会带来性能的下降。其?strcpy 函数一般是在内部调?memcpy 函数或者用汇编直接实现的,以达到高效的目的。因此,使用
memcpy ?strcpy 拯字符串在性能上应该没有什么大的差别?/li>
对于非字W串cd的数据的复制来说Qstrcpy ?snprintf 一般就无能为力了,可是?memcpy
却没有什么媄响。但是,对于基本数据cd来说Q尽可以用 memcpy
q行拯Q由于有赋D符可以方便且高效地q行同种或兼容类型的数据之间的拷贝,所以这U情况下 memcpy 几乎不被使用。memcpy
的长处是用来实现Q通常是内部实现居多)对结构或者数l的拯Q其目的是或者高效,或者用方便,甚或两者兼有?br />
strcpy和memcpy功能上也有些差别Q?br />
比如:
const char *str1="abc\0def";
char str2[7];
首先用strcpy实现Q?br />
strcpyQstr2,str1Q?br />
得到l果Qstr2Q?abc";也就是说Qstrcpy是以'\0'为结束标志的?br />
再用memcpy实现Q?br />
memset(str2,7);
memcpy(str2,str1,7);
得到l果Qstr2="abc\0def";
也就是说Qmemcpy是对内存区域的复制。当Ӟ不仅能够复制字符串数l,而且能够复制整型数组{其他数l?img src ="http://www.aygfsteel.com/lihao336/aggbug/358442.html" width = "1" height = "1" /> ]]> [转]C/C++ void 理解 http://www.aygfsteel.com/lihao336/archive/2011/09/08/358280.htmlcalvin calvin Thu, 08 Sep 2011 03:12:00 GMT http://www.aygfsteel.com/lihao336/archive/2011/09/08/358280.html http://www.aygfsteel.com/lihao336/comments/358280.html http://www.aygfsteel.com/lihao336/archive/2011/09/08/358280.html#Feedback 0 http://www.aygfsteel.com/lihao336/comments/commentRss/358280.html http://www.aygfsteel.com/lihao336/services/trackbacks/358280.html 1.概述 许多初学者对C/C++语言中的void及void指针cd不甚理解Q因此在使用上出C一些错误。本文将对void关键字的深刻含义q行解说Qƈ详述void及void指针cd的用方法与技巧?br /> 2.void的含?br /> void的字面意思是“无cd”,void *则ؓ“无cd指针”,void *可以指向Mcd的数据?br /> void几乎只有“注释”和限制E序的作用,因ؓ从来没有Z定义一个void变量Q让我们试着来定义: void a; q行语句~译时会出错Q提C“illegal use of type 'void'”。不q,即void a的编译不会出错,它也没有M实际意义?br /> void真正发挥的作用在于: Q?Q?对函数返回的限定Q?br /> Q?Q?对函数参数的限定?/b> 我们在W三节对以上二点q行具体说明?br /> 众所周知Q如果指针p1和p2的类型相同,那么我们可以直接在p1和p2间互相赋|如果p1和p2指向不同的数据类型,则必M用强制类型{换运符把赋D符双的指针类型{换ؓ左边指针的类型?br /> 例如Q?br /> float *p1; int *p2; p1 = p2; 其中p1 = p2语句会编译出错,提示?=' : cannot convert from 'int *' to 'float *'”,必须改ؓQ?br /> p1 = (float *)p2; 而void *则不同,Mcd的指针都可以直接赋值给它,无需q行强制cd转换Q?br /> void *p1; int *p2; p1 = p2; 但这q不意味着Qvoid *也可以无需强制cd转换地赋l其它类型的指针。因为“无cd”可以包容“有cd”,而“有cd”则不能包容“无cd”。道理很单,我们可以说“男人和女h都是人”,但不能说“h是男人”或者“h是女人”。下面的语句~译出错Q?br /> void *p1; int *p2; p2 = p1; 提示?=' : cannot convert from 'void *' to 'int *'”?br /> 3.void的?br /> 下面l出void关键字的使用规则Q?br /> 规则一 如果函数没有q回|那么应声明ؓvoidcd 在C语言中,凡不加返回值类型限定的函数Q就会被~译器作回整型值处理?/b>但是许多E序员却误以为其为voidcd。例如: add ( int a, int b ) { return a + b; } int main(int argc, char* argv[]) { printf ( "2 + 3 = %d", add ( 2, 3) ); } E序q行的结果ؓ输出Q?br /> 2 + 3 = 5 q说明不加返回D明的函数的确为int函数?br /> 林锐博士《高质量C/C++~程》中提到Q“C++语言有很严格的类型安全检查,不允怸q情况(指函C加类型声明)发生”。可是编译器q不一定这么认定,譬如在Visual C++6.0中上qadd函数的编译无错也无警告且q行正确Q所以不能寄希望于编译器会做严格的类型检查?br /> 因此Qؓ了避免乱,我们在编写C/C++E序Ӟ对于M函数都必M个不漏地指定其类型。如果函数没有返回|一定要声明为voidcd 。这既是E序良好可读性的需要,也是~程规范性的要求。另外,加上voidcd声明后,也可以发挥代码的“自注释”作用。代码的“自注释”即代码能自己注释自己?br /> 在C++语言中声明一个这L函数Q?br /> int function(void) { return 1; } 则进行下面的调用是不合法的: function(2); 因ؓ在C++中,函数参数为void的意思是q个函数不接受Q何参数?br /> 我们在Turbo C 2.0中编译: #include "stdio.h" fun() { return 1; } main() { printf("%d",fun(2)); getchar(); } ~译正确且输?Q这说明Q在C语言中,可以l无参数的函C送Q意类型的参数Q但是在C++~译器中~译同样的代码则会出错。在C++中,不能向无参数的函C送Q何参敎ͼ出错提示?fun' : function does not take 1 parameters”?br /> 所以,无论在Cq是C++中,若函C接受M参数Q一定要指明参数为void?br /> 规则?心使用void指针cd 按照ANSI(American National Standards Institute)标准Q不能对void指针q行法操作Q即下列操作都是不合法的Q?br /> void * pvoid; pvoid++; //ANSIQ错?br />pvoid += 1; //ANSIQ错?br />//ANSI标准之所以这栯定,是因为它坚持Q进行算法操作的指针必须是确定知道其指向数据cd大小的?br />//例如Q?br />int *pint; pint++; //ANSIQ正?br /> pint++的结果是使其增大sizeof(int)?br /> 但是大名鼎鼎的GNU(GNU's Not Unix的羃?则不q么认定Q它指定void *的算法操作与char *一致?br /> 因此下列语句在GNU~译器中皆正: pvoid++; //GNUQ正?br />pvoid += 1; //GNUQ正?br />pvoid++的执行结果是其增大了1 ?br /> 在实际的E序设计中,合ANSI标准Qƈ提高E序的可UL性,我们可以q样~写实现同样功能的代码: void * pvoid; (char *)pvoid++; //ANSIQ正;GNUQ正?br />(char *)pvoid += 1; //ANSIQ错误;GNUQ正?br /> GNU和ANSIq有一些区别,M而言QGNU较ANSI更“开䏀,提供了对更多语法的支持。但是我们在真实设计Ӟq是应该可能地q合ANSI标准?br /> 规则?如果函数的参数可以是Lcd指针Q那么应声明其参Cؓvoid * 典型的如内存操作函数memcpy和memset的函数原型分别ؓQ?br /> void * memcpy(void *dest, const void *src, size_t len); void * memset ( void * buffer, int c, size_t num ); q样QQ何类型的指针都可以传入memcpy和memset中,q也真实CC内存操作函数的意义,因ؓ它操作的对象仅仅是一片内存,而不片内存是什么类型。如果memcpy和memset的参数类型不是void *Q而是char *Q那才叫真的奇怪了Q这Lmemcpy和memset明显不是一个“纯_的Q脱MU趣味的”函敎ͼ 下面的代码执行正: //CZQmemset接受Lcd指针 int intarray[100]; memset ( intarray, 0, 100*sizeof(int) ); //intarray? //CZQmemcpy接受Lcd指针 int intarray1[100], intarray2[100]; memcpy ( intarray1, intarray2, 100*sizeof(int) ); //intarray2拯lintarray1 有趣的是Qmemcpy和memset函数q回的也是void *cdQ标准库函数的编写者是多么地富有学问啊Q?br /> 规则?void不能代表一个真实的变量 下面代码都企图让void代表一个真实的变量Q因此都是错误的代码Q?br /> void a; //错误 function(void a); //错误 void体现了一U抽象,q个世界上的变量都是“有cd”的Q譬如一个h不是男h是女hQ还有h妖?Q?br /> void的出现只是ؓ了一U抽象的需要,如果你正地理解了面向对象中“抽象基cZ的概念Q也很容易理解void数据cd。正如不能给抽象基类定义一个实例,我们也不能定义一个voidQ让我们cL的称void为“抽象数据类型”)变量?br /> 4.ȝ 小的void蕴藏着很丰富的设计哲学Q作Z名程序设计h员,寚w题进行深一个层ơ的思考必然我们受益匪浅? ]]> main函数参数的意?/title> http://www.aygfsteel.com/lihao336/archive/2011/03/02/345526.htmlcalvin calvin Wed, 02 Mar 2011 13:33:00 GMT http://www.aygfsteel.com/lihao336/archive/2011/03/02/345526.html http://www.aygfsteel.com/lihao336/comments/345526.html http://www.aygfsteel.com/lihao336/archive/2011/03/02/345526.html#Feedback 0 http://www.aygfsteel.com/lihao336/comments/commentRss/345526.html http://www.aygfsteel.com/lihao336/services/trackbacks/345526.html
main()函数一般用int或者void形的。我比较喜欢用int型定义main。因为在l束的时候可以返回给操作pȝ一个g表示执行情况?nbsp;
int argc
q个东东用来表示你在命o行下输入命o的时候,一共有多少个参数。比方说你的E序~译后,可执行文件是test.exe
D:\tc2>test
q个时候,argc的值是1
但是
D:\tc2>test.exe myarg1 myarg2 的话Qargc的值是3。也是命o名加上两个参敎ͼ一׃个参?nbsp;
char *argv[]
q个东东用来取得你所输入的参?nbsp;
D:\tc2>test
q个时候,argc的值是1Qargv[0]的值是 "test"
D:\tc2>test myarg1 myarg2
q个时候,argc的值是3Qargc[0]的值是"test"Qargc[1]的值是"myarg1"Qargc[2]的值是"myarg2"?nbsp;
q个东东一般用来ؓE序提供非常重要的信息,如:数据文g名,{等?nbsp;
如:copy a.c b.txt
q个时候,a.c和b.txt是所谓的“非常重要的信?#8221;。不指定q两个文Ӟ你没法进行拷贝?nbsp;
当你的程序用到argc和argvq两个参数的时候,可以单地通过判断argc的|来看看程序的参数是否W合要求
char *envp[]
q个东东相对来说用得比较。它是用来取得系l的环境变量的?nbsp;
如:在DOS下,有一个PATH变量。当你在DOS提示W下输入一个命令(当然Q这个命令不是dir一cȝ内部命oQ的时候,DOS会首先在当前目录下找q个命o的执行文件。如果找不到Q则到PATH定义的\径下LQ找到则执行Q找不到q回Bad command or file name
在DOS命o提示W下键入set可查看系l的环境变量
同样Q在UNIX或者LINUX下,也有pȝ环境变量Q而且用得比DOS要多。如常用?PATH,$USER,$HOME{等?nbsp;
envp保存所有的环境变量。其格式为(UNIX下)
PATH=/usr/bin;/local/bin;
HOME=/home/shuui
卻I
环境变量??nbsp;
DOS下大概也一栗?nbsp;
环境变量一般用来ؓE序提供附加信息。如Q你做了一个显C文本的内容的程序。你x制其一行中昄的字W的个数。你可以自己定义一个环境变量(UNIX下)
%setenv NUMBER = 10
%echo $NUMBER
10
然后你可以在E序中读入这个环境变量。然后根据其值决定一行输出多个字符。这P如果你不修改环境变量的话Q你每次执行q个E序Q一行中昄的字W数都是不一L
下面是一个例子程?nbsp;
/* argtest.c */
#include<stdio.h>
int main( int argc , char *argv[] , char *envp[] )
{
int i;
printf( "You have inputed total %d argments\n" , argc );
for( i=0 ; i<argc ; i++)
{
printf( "arg%d : %s\n" , i , argv[i] );
}
printf( "The follow is envp :\n" );
for( i=0 ; *envp[i]!='\0' ; i++ )
{
printf( "%s\n" , envp[i] );
}
return 0;
}
D:\>argtest this is a test programe of main()'s argments
You have inputed total 9 argments
arg0 : D:\TC\NONAME.EXE
arg1 : this
arg2 : is
arg3 : a
arg4 : test
arg5 : programe
arg6 : of
arg7 : main()'s
arg8 : argments
The follow is envp :
TMP=C:\WINDOWS\TEMP
TEMP=C:\WINDOWS\TEMP
PROMPT=$p$g
winbootdir=C:\WINDOWS
PATH=C:\WINDOWS;C:\WINDOWS\COMMAND
COMSPEC=C:\WINDOWS\COMMAND.COM
SBPCI=C:\SBPCI
windir=C:\WINDOWS
BLASTER=A220 I7 D1 H7 P330 T6
CMDLINE=noname this is a test programe of main()'s argments
-----------------------------------------------------------------------------------------
命o行参数啊 argc 是参数的个数Qargv[]是参敎ͼargv[0]是文件名Qargv[1]是第一个参?..
如你得exe文g名是:myprog.exeQ那?nbsp;
myprog 12 22 32
则argv[0]="myprog"Qargv[1]="12"Qargv[2]="22"...
]]>
վ֩ģ壺
|
|
|
|
Ǩ |
|
|
|
Ӫɽ |
촨 |
|
|
|
̨ |
|
|
˻ |
Ɽ |
ԫ |
Ϻ |
|
|
|
|
̶ |
|
ʤ |
|
Ԫ |
|
|
Ԫ |
|
ɽ |
|
|
Ͳ |
ׯ |
|
|
|