- 浏览: 65008 次
- 性别:
- 来自: 苏州
-
文章分类
最新评论
-
brxonline:
提示不能这样写234390216 写道234390216 写道 ...
mysql导出数据为excel -
234390216:
234390216 写道不行啊,错误
提示不能这样写
mysql导出数据为excel -
234390216:
不行啊,错误
mysql导出数据为excel
1.非阻塞IO
对于一个给定的描述符有两种方法对其指定非阻塞IO
1)如果调用open获得描述符,则可指定O_NONBLOCK标志
2)对于一个已经打开的描述符,则可调用fcntl由该函数打开O_NONBLOCK文件状态标志
#include "apue.h" #include <errno.h> #include <fcntl.h> char buf[500000]; int main(void) { int ntowrite, nwrite; char *ptr; ntowrite = read(STDIN_FILENO, buf, sizeof(buf)); fprintf(stderr, "read %d bytes\n", ntowrite); set_fl(STDOUT_FILENO, O_NONBLOCK); /* set nonblocking */ ptr = buf; while (ntowrite > 0) { errno = 0; nwrite = write(STDOUT_FILENO, ptr, ntowrite); fprintf(stderr, "nwrite = %d, errno = %d\n", nwrite, errno); if (nwrite > 0) { ptr += nwrite; ntowrite -= nwrite; } } clr_fl(STDOUT_FILENO, O_NONBLOCK); /* clear nonblocking */ exit(0); }
2. 记录锁
记录锁锁定文件中的一个区域
#include <fcntl.h> int fcntl(int filedes, int cmd, ... /* struct
|
Returns: depends on cmd if OK (see following), 1 on error |
cmd is F_GETLK, F_SETLK, or F_SETLKW
struct flock {
short l_type; /* F_RDLCK, F_WRLCK, or F_UNLCK */
off_t l_start; /* offset in bytes, relative to l_whence */
short l_whence; /* SEEK_SET, SEEK_CUR, or SEEK_END */
off_t l_len; /* length, in bytes; 0 means lock to EOF */
pid_t l_pid; /* returned with F_GETLK */
};
例:加锁和解锁一个文件区域的函数
#include "apue.h" #include <fcntl.h> int lock_reg(int fd, int cmd, int type, off_t offset, int whence, off_t len) { struct flock lock; lock.l_type = type; /* F_RDLCK, F_WRLCK, F_UNLCK */ lock.l_start = offset; /* byte offset, relative to l_whence */ lock.l_whence = whence; /* SEEK_SET, SEEK_CUR, SEEK_END */ lock.l_len = len; /* #bytes (0 means to EOF) */ return(fcntl(fd, cmd, &lock)); }
锁的隐含继承和释放
1)
2)
3)
4)
建议性锁和强制性锁
3.STREAMS
1)putmsg和putpmsg函数
2)ioctl
3)写至流
4)写模式
5)getmsg和getpmsg函数
6)读模式
4.IO多路转接
#include <sys/select.h>
int select(int maxfdp1, fd_set *restrict readfds, fd_set *restrict writefds, fd_set ![]() struct timeval *restrict tvptr);
|
Returns: count of ready descriptors, 0 on timeout, 1 on error |
#include <sys/select.h> int pselect(int maxfdp1, fd_set *restrict readfds, fd_set *restrict writefds, fd_set
|
Returns: count of ready descriptors, 0 on timeout, 1 on error |
#include <poll.h> int poll(struct pollfd fdarray[], nfds_t nfds, int
|
Returns: count of ready descriptors, 0 on timeout, 1 on error |
5.异步IO
6.readv和writev函数
7.readn和writen函数
8存储映射IO
#include <sys/mman.h> void *mmap(void *addr, size_t len, int prot, int
|
Returns: starting address of mapped region if OK, MAP_FAILED on error |
例:用存储映射IO复制文件
#include "apue.h" #include <fcntl.h> #include <sys/mman.h> int main(int argc, char *argv[]) { int fdin, fdout; void *src, *dst; struct stat statbuf; if (argc != 3) err_quit("usage: %s <fromfile> <tofile>", argv[0]); if ((fdin = open(argv[1], O_RDONLY)) < 0) err_sys("can't open %s for reading", argv[1]); if ((fdout = open(argv[2], O_RDWR | O_CREAT | O_TRUNC, FILE_MODE)) < 0) err_sys("can't creat %s for writing", argv[2]); if (fstat(fdin, &statbuf) < 0) /* need size of input file */ err_sys("fstat error"); /* set size of output file */ if (lseek(fdout, statbuf.st_size - 1, SEEK_SET) == -1) err_sys("lseek error"); if (write(fdout, "", 1) != 1) err_sys("write error"); if ((src = mmap(0, statbuf.st_size, PROT_READ, MAP_SHARED, fdin, 0)) == MAP_FAILED) err_sys("mmap error for input"); if ((dst = mmap(0, statbuf.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fdout, 0)) == MAP_FAILED) err_sys("mmap error for output"); memcpy(dst, src, statbuf.st_size); /* does the file copy */ exit(0); }
发表评论
-
UNIX网络编程(1)-简介
2011-10-06 17:31 8181.bzero函数 bzero 等同于memset(void ... -
UNIX编程(15)-进程间通信
2011-08-07 12:09 1134. 管道 #include <un ... -
UNIX编程(13)-守护进程
2011-08-02 21:59 9691.守护进程的编程规则 1)用umask将文件模式创建屏蔽字 ... -
UNIX编程(12)-线程控制
2011-07-27 15:26 9531.线程限制 某些系统有线程的限制,可以通过sysconf函 ... -
UNIX编程(11)-线程
2011-07-27 14:34 9911.线程标识 每个线程都有一个线程ID,线程ID只在它所属的 ... -
UNIX编程(10)-信号
2011-07-20 21:18 10461.signal函数 #include ... -
UNIX编程(9)-进程关系
2011-07-12 14:41 11601.终端登录 2.网络登录 3.进程组 ... -
UNIX编程(8)-进程控制
2011-07-09 11:37 12281.进程标识符 每个进程 ... -
UNIX编程(7)-进程环境
2011-07-01 15:07 9141.main 函数 c程序总是从main函数开始执行,当内核 ... -
UNIX编程(6)-系统数据文件和信息
2011-06-28 16:35 12101.口令文件 口令文件存储在/etc/passwd中,是一个A ... -
UNIX编程(5)-标准IO库
2011-06-27 16:55 9861.流的定向 freopen函数清 ... -
UNIX编程(4)-文件和目录
2011-06-23 16:56 12881.stat,fstat,lstat函数 #include & ... -
UNIX编程(3)-文件IO
2011-06-21 17:45 14731.open函数 #include <fcntl.h&g ... -
UNIX编程(2)-UNIX标准化
2011-06-15 11:41 7261.ISO c 2.IEEE POSIX 3.Single U ... -
UNIX编程(1)-基础知识
2011-06-15 10:54 8441.登陆名 登陆名放在/etc ...
相关推荐
《UNIX环境高级编程》是一本深入探讨UNIX系统编程的电子书,共分为23个部分,涵盖19章。在这一章中,作者主要讲解了标准I/O库,这是一个在多个操作系统上广泛实现的库,由ANSI C标准定义。标准I/O库的设计目的是简化...
这些章节的内容构成了一个全面的UNIX编程学习框架,不仅适合有经验的开发者深化理解,也适合初学者系统地学习UNIX环境下的高级编程技术。通过深入学习这些知识,开发者可以更好地利用UNIX系统资源,编写高效且可靠的...
此外,课程还覆盖了异步非阻塞编程模型,例如IO多路复用和事件驱动编程,这些技术对于开发高并发和高性能的网络应用至关重要。 网络异常处理和安全性是课程中的重要环节。学生将学会如何优雅地处理网络异常,例如...
- **Unix编程环境**:包括但不限于编译器、调试器、链接器等工具,以及shell脚本编写能力。 #### 二、C语言在Unix中的应用 - **C语言基础**:介绍C语言的基本语法、数据类型、控制结构等内容。 - **C语言与Unix ...
UNIX环境高级编程是一本专注于C语言编程的高级书籍,主要涉及UNIX系统的深层次使用和编程技巧。本书不仅涵盖了UNIX系统的文件结构、IO库等基础知识,而且深入探讨了进程管理、进程间通讯等高级话题。UNIX系统是多...
- **高级特性**:探讨非阻塞IO、多路复用等高级网络编程技术。 ### 结论 本书《Unix编程环境》是一本经典的参考书籍,不仅适合初学者入门学习,也适合有一定基础的开发者深入研究。通过学习这本书,读者可以全面...
10. **12高级IO.pdf**: 高级I/O通常涉及非阻塞I/O、异步I/O和多路复用技术,如select、poll和epoll,这些都是处理大量并发连接的关键技术。 通过这些章节的学习,读者可以掌握在UNIX环境中进行高效编程所需的高级...
中文名: UNIX环境高级编程 原名: UNIX环境高级编程 作者: W.Richard Stevens / Stephen A.Rago译者: 尤晋元 / 张亚英 ...第12章高级IO 第13章精灵进程 第14章进程间通信 第15章高级进程间通信 第16章数据库函数库 .....
### Unix环境高级编程知识点 #### 1. 程序结束返回值 - **返回值范围**:在Unix环境中,程序结束时...通过以上知识点,我们可以了解到Unix环境下的一些核心概念和技术细节,这对于深入理解和掌握Unix编程至关重要。
**UNIX 环境高级编程知识点** 1. **空洞文件**:空洞文件是一种特殊类型的文件,其中数据部分...这些是针对“武大UNIX环境高级编程2019年考试题目”所涵盖的主要知识点,对于深入理解UNIX编程原理和实践具有重要意义。
理解C语言的基础语法、内存管理和指针操作是Unix编程的基础。 2. **系统调用**:Unix提供了一组系统调用接口,允许程序员与操作系统内核进行交互。例如,`open()`用于打开文件,`write()`用于写入数据,`fork()`...
12 高级IO.pdf 13 精灵进程.pdf 14 进程间通信.pdf 15 高级进程间通信.pdf 16 数据库函数库.pdf 17 与PostScript 打印机通信.pdf 18 调制解调器拨号器.pdf 19 伪终端.pdf 20 附录A 函数原型.pdf 21 附录B ...
6. **错误处理**:在Unix编程中,良好的错误处理能力至关重要。学会使用errno、perror和strerror来报告和诊断错误,以及如何编写健壮的异常处理代码。 7. **标准库和工具**:熟练使用标准C库中的函数,如内存管理...
Java IO流是Java编程中处理输入输出流的高级特性,其目的是为了提供一个统一的方式来处理不同类型的数据,如文本文件、二进制文件等。Java的IO流是设计来实现数据传输的,主要使用java.io包下的各种类和接口。本篇...
9. 网络编程的高级主题:包括IO多路复用、select和poll系统调用的使用、网络文件系统(NFS)的高级特性、网络地址转换(NAT)和网络负载均衡等。 10. 与其他编程语言的接口:虽然本书主要聚焦于使用C语言进行UNIX网络...