@shjanken
2015-11-26T01:03:51.000000Z
字数 1598
阅读 858
未完成 笔记
scanf("%f,%s,%79[^\n]",var1,var2,var3) == 3//[^\n] 表示这行剩下的所有字符都放入var3, scanf 返回值表示成功读取的信息条数
切记,为结构体变量赋值相当于叫计算机复制数据
strcut example {char *name;int age;char *sex;}struct example my = { "janken", 32 , "man"}; //分配了内存空间struct example other = my; //再次为 other 分配了内存
使用 typedef 定义结构体的类型名字
typedef struct example {...} alias; //alias 将是 example 的类型别名alias a = { .. };
使用 fopen 函数打开一个文件(文件描述符). 该函数返回一个指针
FILE *my_file = fopen("/path/to/your/file", "r");
使用fileno函数返回文件描述符的编号.
int descriptor = fileno(my_file);
使用 dup2 函数来复制文件流
dup(4,3) // 将4号数据流复制到3号
每次打开文件都会使用表述符表中新的一项,但如果你想修改某个已经注册过的数据流,比如想让3号描述符重新指其他数据流,可以使用 dup2 函数。dup2() 可以复制数据流。
fork() 函数来创建进程
pid_t pid = fork(); // pid_t 是一个保存了进程号的数据结构,可能是int, 也可能是别的。// 执行了 fork() 函数之后,主进程已经创建了子进程。...if ( pid == 0 ) {//这些代码都运行在子进程中....}
waitpid() 函数来等待子进程结束。
#include <sys/wait.h> //导入头文件int pid_status; //用来保存子进程的推出状态if(waitpid(pid,&pid_status,0) == -1) {error("等待子进程发生了错误");}return 0;....WEXITSTATUS(pid_status); //会返回一个int。必须如此才能获取子进程的返回值。
#include <sys/socket.h> // 套接字头文件...int listener_d = socket(PF_INET,SOCK_STREAM, 0); //打开套接字if( listener_d == -1 ) {error("打开套接子失败");}
BLAB (绑定,监听,接受,开始)
绑定
#include <arpa/inet.h> //为了链接互联网地址,需要包含这些头文件...struct sockaddr_in name;name.sin_family = PF_INET;name.sin_port = (in_port_t)htons(30000);name.sin_addr.s_addr = htonl(INADDR_ANY);/* 以上代码创建一个表示“互联网30000端口” 的套接字名*/int c = bind(listener_d,(struct sockaddr *) &name, sizeof(name));if( c == -1)error("无法绑定端口");
监听
if (listen(listener_d, 10) == -1)error("无法监听");
接受链接
struct sockaddr_storage client_addr;unsigned int address_size = sizeof( client_addr );int connect_d = accept(listener_d, (struct sockaddr *)&client_addr, &address_size);if( connect_d == -1)error("无法打开套接字");
开始通信