![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
ht8269
这个作者很懒,什么都没留下…
展开
-
linux api笔记(1):判断文件是否存在
如果在linux C/C++环境下判断某个文件是否存在,可以使用access函数: #include #include int main(){ const char* file1 = "access.cpp"; const char* file2 = "access1.cpp"; printf("%s:%原创 2010-04-16 09:19:00 · 2335 阅读 · 0 评论 -
服务器开发(二)
后台服务器由于各种原因经常需要协作以解决问题,而如果让每台服务器都实现网络层显然无谓的工作很多,我们可以模拟inetd实现一个后台进程专门用于衔接各个服务器,这样子各个服务器就不再需要编写网络层。原创 2010-05-10 11:01:00 · 411 阅读 · 0 评论 -
服务器开发(三)
服务器挂了却没有core文件,是因为系统对core文件的大小限制出问题了,可以将ulimit -c unlimited写在/etc/profile文件的尾部并重新登录,这样子系统将不对core文件的大小做限制。原创 2010-05-10 11:28:00 · 386 阅读 · 0 评论 -
linux api笔记(10):删除文件
#include int remove(const char *pathname); 使用remove函数可以删除文件。返回值为0表示成功,-1表示失败,具体失败原因需要查看errno。原创 2010-05-12 15:55:00 · 2707 阅读 · 0 评论 -
服务器开发(四)
如果数据库设计的时候使用了分库分表的方案,那么在开发的时候最好也实现一个“修复数据库间数据不同步”的工具,因为没人能够保证自己写的程序不会造成库间不同步的现象。原创 2010-05-19 11:05:00 · 391 阅读 · 0 评论 -
网络编程(六)
开发网络应用请不要少了让你感激地内牛满面的工具:tcpdumpsniffer常用命令:tcpdump -Xnns 2000 ... ... (具体请看man)原创 2010-07-14 02:26:00 · 1194 阅读 · 0 评论 -
网络编程(七) 正确的设置非阻塞套接字
<br />我之前都是用以下方法来将套接字设置为非阻塞状态:<br />fcntl(fd, F_SETFL, O_NONBLOCK);<br />其实上面这种做法只对了一半,因为这操作可能就将fd绑定的其他标志位清除,最理想的做法是:<br />int flags = fcntl(fd, F_GETFL);<br />fcntl(fd, F_SETFL, O_NONBLOCK | flags);原创 2010-07-20 17:22:00 · 417 阅读 · 0 评论 -
服务器开发(五)
服务器开发过程中总会碰到异步编程,从而不得不为一次处理过程分配上下文,但不包含异步过程的处理是不需要上下文的;为了保证服务器开发过程中思路的统一和简单性,不管是否包含异步过程,一个处理过程的执行之前都一律申请上下文,不包含异步过程的处理过程在结束之后就立马回收上下文即可。原创 2010-05-22 12:41:00 · 299 阅读 · 0 评论 -
网络编程(八)非阻塞套接字的连接和select
在处理非阻塞套接字的连接的时候,我们往往会使用select来判断套接字在发起连接之后发生的变化,但是这个过程中linux和windows有些差别,本文将详细分析这两个平台此时的差异性。目标主机端口可达: 当套接字连接目标地址成功之后,select可以检测到这个套接字上的变化:“可写”。这种情况对于linux和windows都是一样的。目标主机不可达: 这种情况下,套接字并没有发生变化,所以select会一直等待直到超时,这种情况对于linux和windows都是一致的。目标端口不可达: 在原创 2010-07-25 04:17:00 · 839 阅读 · 0 评论 -
服务器开发(四)
<br />任何和连接相关的问题请先用tcpdump进行观察。原创 2010-08-09 08:40:00 · 256 阅读 · 0 评论 -
服务器开发(五)
<br />不要盲目自信,任何的改动都可能会产生意想不到的问题,特别是你对这代码不熟的时候(照着抄甚至是拷贝过来)。原创 2010-08-13 10:34:00 · 341 阅读 · 0 评论 -
linux api笔记(9):保证内存页不被淘汰
linux由于使用了虚拟内存技术,那么在一般的情况每个内存页都有可能被刷出物理内存,出于某种目的比如性能和安全性方面考虑,有时候需要保证内存页不会被淘汰,我们可以使用下面函数: #include int mlock(const void *addr, size_t len);int munlock(const void *addr, size_t len); 当我们需要保证原创 2010-05-10 15:29:00 · 534 阅读 · 0 评论 -
网络编程(五) 阻塞套接字如何非阻塞接收数据
“ 阻塞套接字如何非阻塞接收数据?”,虽然这样做比较无聊,而且似乎从来不需要这么用,但是recv函数确实可以做到这一点:recv(fd, buf, size, MSG_DONTWAIT);原创 2010-05-05 11:25:00 · 443 阅读 · 0 评论 -
linux api笔记(2) 网络编程(一)如何判断非阻塞套接字是否连接成功
在socket编程中,我们往往要设置某个套接字为非阻塞状态;当一个套接字被设置为非阻塞状态之后再进行连接的时候,我们往往不确定其能在什么时候连接成功。 connect函数调用之后返回值非零并且errno的值往往是EINPROGRESS(在某些情况下比如连接本地的对端套接字说不定返回是0,这个目前没确定好)。这就意味着我们需要不断地对这个套接字进行检查。 检查就意味着我们在某个循环里面每次原创 2010-04-18 19:05:00 · 2818 阅读 · 0 评论 -
linux api笔记(3):线程(一)
本文中将讲述linux环境编程中线程的使用。不说废话直接上代码:#include #include struct ThreadData{ int i;};void * ThreadProc(void* arg){ ThreadData* data = static_cast(arg); //do something pthread_exit(原创 2010-04-19 08:49:00 · 354 阅读 · 0 评论 -
linux api笔记(4):线程(二)
这一节我们来看看其他线程函数: int pthread_tryjoin_np(pthread_t thread_handle, void ** thread_return);int pthread_timedjoin_np (pthread_t thread_handle, void **thread_return, __const struct timespec *abstime);原创 2010-04-19 14:39:00 · 1910 阅读 · 0 评论 -
linux api笔记(5):线程(三)
这里继续上一篇关于线程函数的介绍: int pthread_detach (pthread_t thread_handle); 这个函数的作用是让thread_handle指向的目标线程在中止的时候清理自己拥有的数据。在这个函数调用之后,不能再对thread_handle使用pthread_join。 显而易见的是,如果我们没有对新创建的线程调用pthread原创 2010-04-19 15:00:00 · 429 阅读 · 0 评论 -
linux api笔记(6):线程(四) 线程私有数据
本文将描述线程的一个比较重要的一方面:线程私有数据,如下代码:#include #include #include pthread_key_t kKey = 0;void * ThreadProc(void* arg){ char* a = (char*)(arg); sleep(2); pthread_setspeci原创 2010-04-19 15:26:00 · 486 阅读 · 0 评论 -
linux api笔记(7):系统调用如何摆脱信号的干扰
在linux环境下编程有一个很让人头疼的问题就是信号对系统调用的干扰,在系统调用过程中如果受到信号的干扰,部分系统调用会将errno设置成EINTR,我们不得不编写下面的错误处理代码来防止这种情况的发生:syscall: int ret = syscall(...); if (ret < 0 && EINTER == errno) goto syscall;原创 2010-04-19 16:11:00 · 988 阅读 · 0 评论 -
linux api笔记(8) 清空文件
清空文件可以使用系统调用truncate:#include #include int main(){ truncate("to_clean_file.txt", 0); return 0;}原创 2010-04-28 07:35:00 · 664 阅读 · 0 评论 -
网络编程(二):先判断错误还是先接受连接?
在一次网络I/O模型的轮询中,我们一般先接收新的连接,其实这样对于后端的业务来说是有问题的,我们因该先判断出错的连接之后才接受新的连接。原创 2010-04-30 15:31:00 · 357 阅读 · 0 评论 -
网络编程(三) SIGPIPE信号
这个信号产生的原因是往一个已经收到RST响应的套接字发送数据的时候会产生这个信号,在服务器编程这个信号必须屏蔽或处理,因为假设服务器A为client而服务器B为server,那么当B挂掉后却很快重启的时候,A很有可能就收到这个信号。屏蔽方法如下:struct sigaction sig;sig.sa_handler = SIG_IGN;sig.sa_flags = 0;si原创 2010-05-05 10:09:00 · 517 阅读 · 0 评论 -
网络编程(四) EPOLL
epoll的优点在于可以支持大量的文件描述符 epoll相关的系统调用: int epoll_create(int size); 参数size的含义我至今没搞懂,如果大家有谁准确的知道的话请一定要留言! int epoll_wait(int epfd, struct epoll_event * events, int maxevent原创 2010-05-05 10:31:00 · 485 阅读 · 0 评论 -
网络编程:close相关
<br />A、B通过socket互联,A主动close,之后B不管调用多少次recv返回的结果都是0.原创 2010-10-14 16:04:00 · 332 阅读 · 0 评论