总结1:
将全局变量放在会被多次调用的头文件中,编译会报错:该变量被多次定义,所以是最好把全局变量放在.c文件中。
总结2:
Getche()函数,输入后立即从控制台取字符,不以回车为结束(带回显);
Getch()是一个不回显函数,当用户按下某个字符时,函数自动读取,无需按回车,有的C语言命令行程序会用到此函数做游戏。
这两个函数不是标准函数,在conin.h中,移植时需要注意。
总结3:
终端覆盖当前行方式
测试:
#include
int main()
{
printf("Hello \n");
printf("Test 1");
printf("\rTest 2\n");
return 0;
}
输出:
Hello
Test 2
总结4:
终端某些字符不变,只是个别字符随着键盘输入改变,可以将光标网上移动n位,然后重新覆盖打印,就可以了。
总结5:
Socket编程,server accept: Invalid argument
socklen_t clilen;
struct sockaddr_in clientaddr;
connfd = accept(listenfd,(sockaddr *)&clientaddr,&clilen);
问题就出在accept的第3个参数:必须为正数,把那个变量初始化一下就好了~
socklen_t clilen= sizeof(struct sockaddr);
struct sockaddr_in clientaddr;
connfd = accept(listenfd,(sockaddr *)&clientaddr,&clilen);
总结6:
Shell脚本出现以下错误:
gcc:fatal error:no input files (致命错误)
compilation terminated.(编译终止)
导致的原因可能是,gcc后面的文件名有错误,编译器没有找到。
总结7:
Shell脚本出现以下错误:
./cs 行17:-f:未找到命令
导致的原因可能是,if A[ A-fA${target}A];,A是空格,缺少其中一个空格,这几个空格都不能少,这里的分号;有没有,我这边用gcc(ubuntu 7.2.0)编译,执行结果都是一样的,没有报错。
Linux的man命令等级:
man 分为1 2 3 4 5 6 7 8等级别
1、Standard commands (标准命令)
2、System calls (系统调用)
3、Library functions (库函数)
4、Special devices (设备说明)
5、File formats (文件格式)
6、Games and toys (游戏和娱乐)
7、Miscellaneous (杂项)
8、Administrative Commands (管理员命令)
比如man socket, 可以发现SEE ALSO中包括ACCEPT(2)等等,可以通过man 2 accept 查看
总结8:
Socket AF_UNIX编程问题:
Bind:address already in use,
Connect:connection refused.
可以采取以下的方式解决,但这个方法不一定唯一:在socket创建之前加unlink(“server_socket”),在socket关闭之后,加unlink(“server_socket”)。个人测试,创建前的必须加,关闭之后是可以不加,但是建议都加上,比较安全。
总结9:
Socket 编程编译问题:
/*接受客户端请求; 第2个参数用来存储客户端地址; 第3个参数用来存储客户端地址的大小*/
/*建立(返回)一个到客户端的文件描述符,用以对客户端的读写操作*/
client_sockfd = accept (server_sockfd, (struct sockaddr *)&client_address, (socklen_t*)&client_len);
在使用accept函数之后,会产生一个新的socket描述符,另外的服务器描述符又去继续接听其他的客户端了。所以编程建议是开始定义两个描述符,server_sockfd和client_sockfd。