int accept(int s, struct sockaddr *addr, int *addrlen);
accept()用来接受参数s 的socket 连线。参数s 的socket 必需先经bind()、listen()函数处理过,当有连线进来时accept()会返回一个新的socket 处理代码,往后的数据传送与读取就是经由新的socket处理,而原来参数s 的socket 能继续使用accept()来接受新的连线要求。
int accept(int s, struct sockaddr *addr, int *addrlen);
accept()用来接受参数s 的socket 连线。参数s 的socket 必需先经bind()、listen()函数处理过,当有连线进来时accept()会返回一个新的socket 处理代码,往后的数据传送与读取就是经由新的socket处理,而原来参数s 的socket 能继续使用accept()来接受新的连线要求。
一、用英语来阅读
我认为像 int *hoge_p; 还有 int hoge[10]; 这样的声明方式很奇怪。
对于这种程序的声明方式,可能也有很多人感觉不到什么别扭的地方。那就再看下面的这个例子(经常被使用):
char *color_name[] = {
"red",
"green",
"blue"
};
这里声明了一个“指向 char 的指针的数组”。
Select IO复用机制:
关键字是已被C语言标准作为命令、数据类型或者固定函数名的字母组合。关键字不能被用做变量名或函数名。下面列举了C语言的32个关键字,它们遵循C语言的语法使用,形成了C程序设计语言。
《CMake实践》的第三章,初试cmake - cmake的helloworld 中的
PROJECT (HELLO)
SET(SRC_LIST main.c)
MESSAGE(status "This is BINARY dir " ${HELLO_BINARY_DIR})
MESSAGE(status "This is SOURCE dir " ${HELLO_SOURCE_DIR})
ADD_EXECUTABLE(hello SRC_LIST)
报错
用过Windows的我们都知道,当我们无法正常结束一个程序时,可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢?同样的功能在Linux上是通过生成信号和捕获信号来实现的,运行中的进程捕获到这个信号然后作出一定的操作并最终被终止。
信号是UNIX和Linux系统响应某些条件而产生的一个事件,接收到该信号的进程会相应地采取一些行动。通常信号是由一个错误产生的。但它们还可以作为进程间通信或修改行为的一种方式,明确地由一个进程发送给另一个进程。一个信号的产生叫生成,接收到一个信号叫捕获。
本小节主要描述了如何在工程中使用多目录、各种安装指令以及CMAKE_INSTALL_PREFIX变量(你真够牛的,这么点东西居然罗唆了这么多文字)在下一小节,我们将探讨如何在cmake中构建动态库和静态库,以及如何使用外部头文件和外部共享库,毕竟,这是程序编写中最长使用的(对了,你知道用怎样的gcc参数可以直接构建静态库和动态库吗?)
首先给出《The_C_Programming_Language》这本书中的例子:
#include <stdio.h>
int main()
{
int c;
c = getchar();
while (c != EOF)
{
putchar();
c = getchar();
}
return 0;
}
这里主要解释下为什么要用int型来接受getchar函数。
#include <stdio.h>
#include <math.h>
main()
{
int i;
int x = 16, y = 2;
i = 12 * pow(x, y);
printf("%d\n", i);
}
编译 gcc area.c -0 area.out
报错
/tmp/ccEA3QIN.o: In function `main':
a.c:(.text+0x25): undefined reference to `pow'
Makefile拥有复杂的语法结构,甚至让人难以领会,当我们项目非常大的时候,维护Makefile会成为一件非常头疼的事情。于是我们就有了Autotools工具,专门用来生成Makefile,这个工具让我们很大程度的降低了开发的难度。