char函数

文件IO

允我心安 提交于 2019-12-05 17:56:58
目录 文件IO 文件描述符 获取最大支持的描述符 open/openat/creat close lseek off_t 类型说明 lseek与OAPPEND的区别 内核维护的文件信息 dup/dup2 FD_CLOEXEC 缓存同步到存储 fcntl改变文件属性 ioctl 文件截断 代码附录 获取最大文件描述符 使用openat来实现一种相对路径的打开 lseek测试管道等 lseek文件跨越写 fcntl获取文件状态 title: 文件IO date: 2019/11/23 10:49:52 toc: true --- 文件IO 文件描述符 文件描述符是非负的整数,一般是系统调用的,这个与 file_struct 区别开来. STDIN_FILENO, STDOUT_FILENO, and STDERR_FILENO 被定义在 <unistd.h> 获取最大支持的描述符 新的 linux 已经不支持 OPEN_MAX 来直接获取这个最大描述符了, sysconf(_SC_OPEN_MAX) shell 下这么查看,其中的 open files (-n) 1024 就是了 reallin@ubuntu:/work/pan/apue$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d)

ioctl操作

拥有回忆 提交于 2019-12-05 17:52:00
  在本书中有两个地方都对这个函数进行了介绍,其实还有很多地方需要这个函数。ioclt函数传统上一直作为纳西而不适合归入其他精细定义类别的特性的系统接口。网络程序(特别是服务器程序)经常在程序启动执行后使用ioctl获取所在主机全部网络接口的信心,包括:接口地址、是否支持广播、是否支持多播。 #include <unistd.h> int ioctl(int fd,int request,...../* void *arg /); //返回:若成功则为0.失败则我-1 套接字操作 文件操作 接口操作 ARP高速缓存操作 路由表操作 流系统   不但某些ioclt操作和某些fcntl操作功能重叠(譬如把套接字设置为非阻塞),而且某些操作可以使用ioctl以不止一种方式制定(譬如设置套接字的进程组属主)。下表列出了网络相关ioctl请求的request参数以及arg地址必须指向的数据类型。 套接字操作   明确要求套接字ioctl请求有三个,它们都要求ioctl的第三个参数是指向某个整数的一个指针。 SIOCATMARK:如果本套接字的读指针当前位于带外标记,那就通过由第三个参数指向的帧数放回一个非0值,否则返回一个0值。 SIOCGPGRP:通过由第三个参数指向的整数返回本套接字的进程ID或进程组ID,该ID指定针对本套接字的SIGIO或SIGURG信号的接受进程。 SIOCSPGR

数据库操作

喜你入骨 提交于 2019-12-05 17:32:48
去下划线? 一.知识点 △用数据库的原因 1文件操作的复杂度 2同步 3并发处理 4安全 △数据库管理系统-DBM # 网络应用服务端 # 我们要使用服务端的数据 - 需要有一个客户端 # 客户端可以自己写 : 未来写代码的时候 # 也可以用别人写好的 : 第三方的工具 数据库管理软件的公司出版的官方客户端 # 数据库管理系统本质上也是管理一堆文件 # 只不过人家的管理方式比我们更高效 更安全 △数据库管理员-DBA # 搭建数据库服务环境 # 用户的创建 权限的管理 # 性能\语句的优化 # 数据库的二次开发 : 让数据库具有公司的特质 △软件 # mysql : 小公司 # 甲骨文 oracle : 事业单位 金融企业 # 微软 sql server # sqllite 数据库的分类 # 关系型数据库 mysql oracle sqlserver sqllite # 非关系型数据库 redis mongodb memcache hbase 关系型数据库 优点: 1、易于维护:都是使用表结构,格式一致 2、使用方便:SQL语言通用,可用于复杂查询 3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询 缺点: 1、读写性能比较差,尤其是海量数据的高效率读写 2、固定的表结构,灵活度稍欠 3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈

MFC常用数据类型

烈酒焚心 提交于 2019-12-05 16:49:11
转载自: https://www.cnblogs.com/xzxl/p/7955477.html 下面这些是和Win32程序共同使用的数据类型 BOOL:布尔值,取值为TRUE or FALSE BSTR:32-bit 字符指针 BYTE:8-bit整数,未带正负号 COLORREF:32-bit数值,代表一个颜色值 DWORD:32-bit整数,未带正负号 LONG:32-bit整数,带正负号 LPARAM:32-bit整数,作为窗口函数或callback函数的一个参数 LPCSTR:32-bit指针,指向一个常数字符串 LPSTR:32-bit指针,指向一个字符串 LPCTSTR:32-bit指针,指向一个常数字符串,此字符串可以移植到Unicode和DBCS LPTSTR:32-bit指针,指向一个字符串,此字符串可以移植到Unicode和DBCS LPVOID:32-bit指针,指向一个未指定类型的数据 LPRESULT:32-bit数值,作为窗口函数或callback函数的返回值 UINT:在Win16中是一个16-bit 未带正负号整数,在Win32中是一个32-bit 未带 正负号整数, WNDPROC:32-bit指针,指向一个窗口函数 WORD:16-bit 整数 ,未带正负号 WPARAM:窗口函数或callback函数的一个参数,在Win16中是16-bit

C语言实现FTP服务器

微笑、不失礼 提交于 2019-12-05 15:20:26
公共部分代码 /* common.h */ #ifndef COMMON_H #define COMMON_H #include <arpa/inet.h> #include <ctype.h> #include <dirent.h> #include <errno.h> #include <fcntl.h> #include <netdb.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/wait.h> #include <sys/socket.h> #include <sys/types.h> #include <unistd.h> #define DEBUG 1 #define MAXSIZE 512 #define CLIENT_PORT_ID 30020 struct command { char arg[255]; char code[5]; }; int socket_create(int port); int socket_accept(int sock_listen); int socket_connect(int port, char *host); int recv_data(int sockfd, char*

Linux下显示运行时链接(运行时加载)

六月ゝ 毕业季﹏ 提交于 2019-12-05 14:56:10
目录 介绍 如何加载动态库 dlopen() 第一个参数: 被加载动态库的路径 第二个参数: flag表示函数符号的解析方式 dlopen 返回值 dlsym() 参数: 返回值 符号优先级 dlerror() dlclose() show code 内容学习自《 程序员的自我修养 链接装载与库》 如果只是想知道如何使用如何加载动态库和那4个函数的使用,可以直接从如何加载动态库开始看。 介绍 支持动态链接的系统往往都支持一种更加灵活的模块加载方式,叫做显式运行时链接(Explicit Run-time Linking),有时候也叫做运行时加载。也就是让程序自己在运行时控制加载指定的模块,并且可以在不需要该模块时将其卸载。从前面我们了解到的来看,如果动态链接器可以在运行时将共享模块装载进内存并且可以进行重定位等操作,那么这种运行时加载在理论上也是很容易实现的。而且一般的共享对象不需要进行任何修改就可以进行运行时装载,这种共享对象往往被叫做动态装载库(Dynamic Loading Library),其实本质上它跟一般的共享对象没什么区别,只是程序开发者使用它的角度不同。 这种运行时加载使得程序的模块组织变得很灵活,可以用来实现一些诸如插件、驱动等功能。当程序需要用到某个插件或者驱动的时候,才将相应的模块装载进来,而不需要从一开始就将他们全部装载进来,从而减少了程序启动时间和内存使用

c++回调函数 callback

霸气de小男生 提交于 2019-12-05 14:53:09
C++中实现回调机制的几种方式 (1)Callback方式 Callback的本质是设置一个函数指针进去,然后在需要需要触发某个事件时调用该方法, 比如Windows的窗口消息处理函数就是这种类型。比如下面的示例代码,我们在Download完成时需要触发一个通知外面的事件: [cpp] view plain copy typedef void (__stdcall *DownloadCallback)( const char * pURL, bool bOK); void DownloadFile( const char * pURL, DownloadCallback callback) { cout << "downloading: " << pURL << "" << endl; callback(pURL, true ); } void __stdcall OnDownloadFinished( const char * pURL, bool bOK) { cout << "OnDownloadFinished, URL:" << pURL << " status:" << bOK << endl; } (2)Sink方式 Sink的本质是你按照对方要求实现一个C++接口,然后把你实现的接口设置给对方,对方需要触发事件时调用该接口, COM中连接点就是居于这种方式

C 库函数 - strncpy()

不问归期 提交于 2019-12-05 14:32:02
描述 C 库函数 char *strncpy(char *dest, const char *src, size_t n) 把 src 所指向的字符串复制到 dest ,最多复制 n 个字符。当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充。 声明 下面是 strncpy() 函数的声明。 char *strncpy(char *dest, const char *src, size_t n) 参数 dest -- 指向用于存储复制内容的目标数组。 src -- 要复制的字符串。 n -- 要从源中复制的字符数。 返回值 该函数返回最终复制的字符串。 实例 下面的实例演示了 strncpy() 函数的用法。在这里,我们使用函数 memset() 来清除内存位置。 1 #include <stdio.h> 2 #include <string.h> 3 4 int main() 5 { 6 char src[40]; 7 char dest[12]; 8 9 memset(dest, '\0', sizeof(dest)); 10 strcpy(src, "This is runoob.com"); 11 strncpy(dest, src, 10); 12 13 printf("最终的目标字符串: %s\n", dest); 14 15 return(0); 16

数据库oracle基础语句

心已入冬 提交于 2019-12-05 14:02:50
一、运算符 算术运算符:+ - * / 可以在select 语句中使用 连接运算符:|| select deptno|| dname from dept; 比较运算符:> >= = != < <= like between is null in 逻辑运算符:not and or 集合运算符: intersect ,union, union all, minus 要求: 对应集合的列数和数据类型相同 查询中不能包含long 列 列的标签是第一个集合的标签 使用order by时,必须使用位置序号,不能使用列名 例:集合运算符的使用: 复制代码 代码如下: intersect ,union, union all, minus select * from emp intersect select * from emp where deptno=10 ; select * from emp minus select * from emp where deptno=10; select * from emp where deptno=10 union select * from emp where deptno in (10,20); --不包括重复行 select * from emp where deptno=10 union all select * from emp where

C语言sprintf函数的深入理解

こ雲淡風輕ζ 提交于 2019-12-05 13:55:31
由于sprintf跟printf在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf比printf有用得多。所以本文着重介绍sprintf,有时也穿插着用用 pritnf。 sprintf是个变参函数,定义如下: int sprintf( char *buffer, const char *format [, argument] … ); 除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:格式化字符串上。 printf 和sprintf都使用格式化字符串来指 定串的格式,在格式串内部使用一些以“%”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要 的字符串。 1. 格式化数字字符串 sprintf最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf在大多数场合可以替代itoa。如: //把整数123打印成一个字符串保存在s中。 sprintf(s, “%d”, 123); //产生“123″ 可以指定宽度,不足的左边补空格: sprintf(s, “%8d%8d”, 123, 4567); //产生:“ 123 4567″ 当然也可以左对齐: