
unix c基础
pzpzpzp_
这个作者很懒,什么都没留下…
展开
-
文件锁
如果对一个文件的同一个区域同时读和写,则会发生冲突,导致读和写发生错误,所以要使用文件锁对其进行锁定。 当我们对一个文件写入时,其他进程对其不能进行操作,而对其读时,其他进程不可以写但是可以读。即写独占,读共享。 因此,读锁相当于一个共享锁,对于一个文件的一个区域可以同时加多把锁。而对于一个写锁,对于某个文件只能在一个区域加入一把锁。 使用函数: int fcntl(int fd, F_SETLK/F_SETLKW, struct flock *lock); fd:文件描述符。...原创 2021-05-24 21:03:42 · 627 阅读 · 0 评论 -
dup()和dup2()
dup和dup2函数都是复制文件描述符的函数,其会将目标文件描述符的文件表项复制给一个其他的文件描述符。 简而言之,dup等函数可以一个已经打开的文件描述符表项复制给另一个文件描述符中,即可以通过两个不同的文件描述符来操控同一个文件。 函数形式: int dup(int oldfd);成功返回目标文件的描述符,失败则返回-1.如int fd2 = dup(fd); fd2则会得到一个新的文件描述符,而且可以和fd一起操控同一个文件。 在使用之后也需要将两个文件描述符关闭: ...原创 2021-05-24 20:22:25 · 380 阅读 · 0 评论 -
write()和read()函数
两个函数是对文件进行读写操作,使用时需要包含unistd.h,函数格式如下: ssize_t write(int fd, const void *buf, size_t count); ssize_t read(int fd, void *buf, size_t count); fd:目标文件 buf:内存的缓冲区 count:期望写入、读取的字节数 成功写入的时候会返回实际写入的字节数,失败返回-1。 实例代码如下:1.write的用法:#incl...原创 2021-05-23 21:49:11 · 1045 阅读 · 0 评论 -
mmap()函数
mmap函数提供了一种高效的方式对内存进行访问,其成功则会直接返回一个映射的起始指针,也可以对文件进行直接访问,而不需要read()或write()函数等进行操作。 函数所在头文件为<sys/mma.h> 其形式为:void *mmap(void *start, size_t length, int port, int *flag, int fd, off_t offset) 其中start 为映射区的起始地址,如果想要自动选择的话,要用NULL; length:映...原创 2021-05-23 21:35:26 · 1553 阅读 · 1 评论 -
UC中常用的文件操作函数open
UC中常用的文件操作函数:1.int open(const char* pathname, int flag, mode_t mode);:文件打开,成功返回文件描述符,失败返回-1。传入参数解释如下:(1)const char* pathname : 显而易见为文件路径(2)int flag :其可以取: O_RDONLY - 只读 O_WRONLY -只写 O_RDWR -读写(以上三个只能选一) O_APPEND - 在已有...原创 2021-05-01 22:29:29 · 256 阅读 · 0 评论 -
linux静态库与动态库
当我们进行c编程时,要实现多个功能时,可以采用两种模型: 1.单一模型:将所有功能都全部实现于一个文件。简言之就是把所有的代码都写在一个c文件中,初学时常常这么做,但是其编译时间过长,及其不利于维护与协作开发。代码过多时,一坨又一坨的代码看着就头疼。2.分离模型:进行模块化,将不同功能分别划分到不同源文件中,各个功能链接成不同的库文件。这样可以缩短编译时间,维护和协作开发容易。 如果采用分离模型,则可以按照如下实例来解释: a.o \ b.o |------>...原创 2021-04-21 22:00:04 · 398 阅读 · 0 评论 -
gcc的构建与编译
gcc的构建过程:源代码(.c)->预编译,产生头文件和宏扩展->编译,得到汇编码(.s)->汇编,得到目标码(.o)->链接,得到可执行代码。那么在linux中,我们可以运用如下指令进行分布构建:例如:vim hello.c -编写源代码gcc -E hello.c-o hello.i -预编译(也称编译预处理)gcc -S hello....原创 2021-04-21 10:39:07 · 341 阅读 · 0 评论