系统调用跟我学

系统调用跟我学

最近浏览到一篇不错的文章,略带有科普性质,原文链接:

系统调用跟我学一

系统调用跟我学二

系统调用跟我学三

系统调用跟我学四

coredump

最近在定位一个非必现的问题时存在一个认识错误,在linux中开启coredump的脚本如下:

#!/bin/bash

### Filename: coredumpshell.sh

### Description: enable coredump and format the name of core file on centos system

# enable coredump whith unlimited ......

网络序与主机序

用一个例子演示htons的用法,用于编译的centos虚拟机为小端模式,因此下面的程序输出为

10 00

4096

与htons函数类似的几个函数及对应的作用如下:

uint32_t htonl(uint32_t hostlong);

uint16_t htons(uint16_t hostshort);

uint32_t ntohl(uint32_t netlong);

uint16_t ntohs(uint16_t netshort);

Description

The htonl() function converts the unsigned integer hostlon......

epoll实例

epoll的示例网上很多,个人认为这个例子最能反映epoll的用法,最近在看libevent的源码,按照目前的工作繁忙情况也只有周日一天有时间看看,有点想念以前时间比较多,可以写一些学习笔记。

计划后续写一些livevent源码学习笔记。io多路复用可以参考我的另一篇文章io多路复用

getaddrinfo可以参考man手册的例子:getaddrinfo

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <errno.h>

#include <sy......

可重入和非可重入函数

可重入和非可重入函数

深入理解可重入函数为何物,首先需要区分单线程程序和多线程程序。典型UNIX程序都具有一条执行线程,贯穿程序始终,CPU围绕单条执行逻辑来处理指令。而对于多线程程序而言,同一进程却存在多条独立、并发的执行逻辑流。

多线程程序与使用了信号处理函数的程序中需要注意函数是否可重入,因为信号处理函数可能会在任一时刻异步中断程序的执行,从而在同一个进程中实际形成两条(主程序和信号处理函数)独立(虽然不是并发)的执行线程。

信号

整理书中的关于信号的例子,总结相关用法与误区。

信号是发生某种事件的通知机制,可以由内核、另一进程或进程自身发送给进程。存在一系列的标准信号类型,每种都有唯一的编号和目的。

信号传递通常是异步行为,这意味着信号中断进程执行的位置是不可预知的。默认情况下,要么忽略信号,要么终止进程,要么停止一个正在运行的进程。要么重启一个已停止的进程。特定的默认类型取决于信号类型。程序可以通过signal sigaction函数来显示忽略一个信号,或者建立一个由程序员自定义的信号处理器程序,以提供信号到达时调用。出于移植性考虑最好使用sigaction函数来建立信号处理函数。

一个具有相应权限的进程可以使......

从无锁锁说起

多线程编程中经常用锁来控制对全局变量的访问。多线程编程中必须确保多个线程不会同时修改同一变量,或者某一线程不会读取正在由其他线程修改的变量。下面是一个例子:

#include <stdio.h>

#include <pthread.h>

#include <unistd.h>

int sum = 0;

void* adder(void *p)

{

for(int i = 0; i < 100000; i++) // 十万

{

sum++;

}

return NULL;

}

int main()

{

pthread_t threads[10......

网络编程-简单服务器客户端实现

刷微博看到有人推荐了一篇国外讲网络编程的文章,有时间学习了下,现将部分内容整理如下已备复习查阅。

服务端:

server.c

/*

** server.c -- a stream socket server demo

*/

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <errno.h>

#include <string.h>

#include <sys/types.h>

#include <sys/socket.h&......

网络编程-inet_pton和inet_ntop函数

最近解决了一个bug,是由于之前同事对于inet_ntop和inet_pton函数的理解存在问题,因此结合网络编程卷一书中的内容,将此部分内容总结记录。

函数原形:

#include <arpa/inet.h>

int inet_pton(int af, const char *src, void *dst);

const char *inet_ntop(int af, const void *src,char *dst, socklen_t size);

首先指出的是这两个函数是随IPv6出现的新函数,对于IPv4和IPv6都适用。函数名中的p和n分别代表表达(pr......

vfork挂掉的一个问题

原文链接

有如下代码:

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

int glob = 10;

int main(void)

{

int var;

var = 88;

pid_t pid;

if ((pid = vfork()) < 0)

{

printf("vfork error");

exit(-1);

}else if (pid == 0)

{ /* 子进程 */

var++;

return 0;

}

printf("pid=%......

linux c如何计算文件大小

最近在翻apue,看到函数lseek时想到之前一个面试题,如何计算文件的大小,现将部分实现整理如下:

方法一标准库函数实现:

#include <stdio.h>

#include <string.h>

#include <errno.h>

int main(int argc,char *argv[])

{

FILE *fp;

if(argc < 2)

{

printf("Usage:%s <file>\n",argv[0]);

}

if((fp=fopen(argv[1],"r")) ==......