Linux下C语言编程的问题

来源:互联网 发布:股票盈亏软件 编辑:程序博客网 时间:2024/05/21 14:55

1.socket延时设置不生效

setsockopt设置延时之后并没有生效,留坑???

2.bind address

socket关闭之后,所使用的地址不能立即释放;

bind 普遍遭遇的问题是试图绑定一个已经在使用的端口。该陷阱是也许没有活动的套接字存在,但仍然禁止绑定端口(bind 返回 EADDRINUSE),它由 TCP 套接字状态 TIME_WAIT 引起。该状态在套接字关闭后约保留 2 到 4 分钟。在 TIME_WAIT 状态退出之后,套接字被删除,该地址才能被重新绑定而不出问题。

在代码中添加代码:

int sockfd;int option = 1;sockfd = socket(AF_INET, SOCK_STREAM, 0);setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option));
代码的作用是socket关闭之后立即释放地址。

3.TCP连接失效的问题

建立连接之后,如果在很长的一段时间内不通信的话就会默认关闭,解决的机制是在一段时间内就发送一条数据包以建立通信.

参见TCP心跳机制

4.file descripter

在程序异常关闭的时候,没有把已经打开的文件close掉,设备长时间不关闭,导致打开的文件达到上限,报错。

fopen error:24,too many files open

解决方案:退出时截获相关的signal,自定义interrupt handler,避免之后的隐患

增加signal截获的机制,具体来说就是针对每一个捕获到的信号添加signal handler函数,针对不同的信号可以添加不同的处理函数,这样,signal处理将按照自定义的方式进行,而不是按照默认的方式退出(或其他的操作)。当进程与单个线程之间对不同的signal的处理方式不同时,可以使用用户自定义信号来处理。

4.broken pipe

socket发送到本地缓存,但是没有及时取出数据,导致缓冲区满了,当此时再向缓冲区存数据的时候就会报错。Broken pipe产生的原因通常是当管道读端没有在读,而管道的写端有线程在写就会造成管道中断,由于管道是单向通信的

5.ctime计算时间出错(跟实际的时分秒不一致)

解决方案:日历时间表示从标准时间到现在的时间经过的秒数,不包括插入闰秒对时间的调整。

time_t time(time_t * timer):得到从标准计时点(一般是1970年1月1日午夜)到当前时间的秒数。

函数 char* ctime(const time_t* timer):把日历时间time_t timer输出到字符串,输出格式为为"Www Mmm dd hh:mm:ss yyyy",即“周几 月份数 日数 小时数:分钟数:秒钟数 年份数”。函数返回的字符串为静态分配,长度不大于26

所以出现不一样的原因是闰秒的影响。

6.pthread_create

多次create,没有将线程占用的资源释放掉,导致errno11错误(资源有限)。

解决方案:
每个线程创建以后都应该调用pthread_join 或 pthread_detach 函数,只有这样在线程结束的时候资源(线程的描述信息和stack)才能被释放.新线程里面没有调用pthread_join 或 pthread_detach会导致内存泄漏, 如果你创建的线程越多,你的内存利用率就会越高, 直到你再无法创建线程,最终只能结束进程。
解决方法有三个:1. 线程里面调用 pthread_detach(pthread_self()) 这个方法最简单   2. 在创建线程的设置PTHREAD_CREATE_DETACHED属性3. 创建线程后用 pthread_join() 一直等待子线程结束。例子详见参考文献[4]

7.字符串解析parse_json

token的设置要保证足够分成不同的部分,否则解析失败

8.命令ps与pgrep的区别

ps可以查看所有的程序的运行状态;pgrep只可以查看运行状态的程序及PID

9.reboot,reset,power cycle的区别

大概为reset为恢复出厂设置,power cycle为断电再接通电源,reboot跟断电差不多,具体不是很清楚与前两者的区别。留坑,待填???

10.在同一个局域网内两台设备的ip为192.168.7.1,试图两者相连,导致router失败

解决方案:经过跳转,使得7.1先与8.1相连,再使得8.1连接另一个7.1。


参考文献:

[1].https://en.wikipedia.org/wiki/Unix_signal

[2].http://www.cnblogs.com/taobataoma/archive/2007/08/30/875743.html

[3].http://www.cnblogs.com/liu1989/p/3383714.html

[4].http://www.cppblog.com/prayer/archive/2012/04/23/172427.html




0 0
原创粉丝点击