linux c语言lockf(),linux IO

以下内容仅表示自己的学习笔记,对其中一些知识的见解,防止遗忘,不喜勿喷。错误之处,欢迎发邮箱指导:738254743@qq.com

阻塞:没有获得资源则进程挂起,直到获取资源为止。挂起进程进入睡眠状态,给调度的等待队列移走,直到等待条件满足。

非阻塞:操作设备部不挂起,或放弃,或反复查询。

非阻塞和阻塞区别:非阻塞:不断查询,消耗CPU;阻塞时进程进入休眠状态,将CPU资源让给其他资源

阻塞唤醒:1,唤醒休眠进程,最大可能在中断里,往往伴随中断

2,或者等待队列唤醒

关于struct和class区别:

1):默认继承访问权限:struct是public、class是private

2):struct作为数据结构的实现体,默认数据访问是publie,class对象实现体,默认数据访问是private

3):只有class能定义模板参数

1,Linux 中的文件主要分为 4 种:普通文件、目录文件、链接文件和设备文件。

2,所有对设备和文件的描述都使用文件描述符进行的。打开文件的时候向内核返回一个文件描述符。

3,文件IO:有缓冲:eg: fopen

标准IO:无缓冲:eg: open

4,定位:可以选择读取数据的大小和位置

lseek(int fd, off_offest, int whence):出错返回:-1

Offset:偏移量(单位字节,可正、可负)

Whence:SEEK_SET:当前位置 为开头

: SEEK_CUR:当前位置为文件指针位置

:SEEK_END: 文件结尾

5,文件锁:1,lockf():对文件施加建议锁

2,fcntl():对文件施加建议锁,也可以施加强制锁(用的最多)---->记录锁

6,串口通信:1,并行通信:传输距离短,速度快

2,串行通信:传输距离长,速度慢

UART操作主要:数据接收,数据发送,产生中断,设置Loopback模式,红外模式,硬软流控模式

标准IO

1,输出一个字符:fpuct()

2,打开文件,失败返回值NULL:fopen():打开文件路径和模式

Fdopen():打开文件描述符合模式

Freopen():打开文件、模式和特定IO流

3,关闭文件:fclose()

4,读IO:fread(void * ptr,size_t size,size_t nmemb,FILE * stream)

Ptr:缓存区,size:读取大小(每次读取大小),nmemb:读取记录数(总数),stream:要读取文件流

写IO:fwrite(constvoid * ptr,size_t size,size_t nmemb,FILE * stream)

5,字符输入输出:

1)读写一个字符---->输入getc(file *stream)

Fgetc(file *stream)Stream: 文件流

输出:putc(int c, file *stream)

Fpuct(int c, file *stream)

C:字符,stream:文件流

2)行输入:gets(char *s)

Fgets(char *s, int size, file *stream)

行输出:puts(const char *s)

Fputs(const char *s, file *stream)

失败返回:NULL

3)格式化输入输出:

输出:int printf(const char *format)

Int fprintf(file *fp, const char *format)

Int sprintf(char *buf, const char *format)

Format:输出格式,fp:文件描述符,buf:缓存区

失败返回:NULL

输入:int scanf(const char *format)

Int fscanf(file *fp, const char *format)

Int sscanf(file *fp, const char *format)

Format:输入格式,fp:文件描述符,buf:缓存区

失败返回:NULL

----------------------------------------------------写于2015年4月10号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: lockf函数是Linux系统中的一个文件锁定函数,它可以用来锁定一个文件的某个区域,以防止其他进程对该区域进行读写操作。lockf函数的使用非常简单,只需要指定文件描述符、锁定方式、锁定起始位置和锁定长度即可。在使用lockf函数时,需要注意避免死锁和竞争条件等问题。 ### 回答2: lockf()函数是linux系统提供的文件锁定函数,可以通过锁定文件进行线程之间的同步和互斥控制。 lockf()函数可以实现两种类型的文件锁定:共享锁和排它锁。 共享锁允许多个进程同时对同一个文件进行读操作,但是任何一个进程想要对该文件进行写操作的时候,必须先解除该文件的共享锁定。 排它锁可以保证在任何时刻只能有一个进程对该文件进行读写操作,其他进程必须等待该进程解除该文件的锁定才能对该文件进行操作。 lockf()函数可以通过指定锁定的范围来实现对文件的部分或全部锁定。通过使用lockf()函数,进程可以将某个范围内的文件锁定在内存中,从而防止其他进程对该文件进行修改。 lockf()函数还可以对已经被锁定的文件进行修改或者删除。如果一个进程希望对一个已被锁定的文件进行修改或删除,那么该进程需要先解除该文件的锁定,否则将无法对该文件进行任何操作。 总之,lockf()函数是linux系统提供的一个非常重要的文件锁定函数,可以实现线程之间的同步和互斥控制。在编写多线程程序时,使用lockf()函数可以有效地避免数据竞争和死锁等问题,提高程序的稳定性和可靠性。 ### 回答3: lockf函数是Linux系统中用于在文件中实现锁操作的函数,可以用于控制文件的读或写等操作,避免多个进程同时对同一个文件进行读写操作而导致数据混乱或错误的情况。其主要作用是提供了一种可靠的文件锁定方法,为多进程访问同一文件提供了保障。 lockf函数的基本用法为: int lockf(int fd, int cmd, off_t len); 其中,fd参数是所要锁定的文件描述符,cmd参数是锁定操作的指令,可以是F_LOCK、F_TLOCK、F_ULOCK和F_TEST等,len参数是所要锁定的字节数。 具体来说,F_LOCK指令是指锁定整个文件,只有当整个文件都锁定成功后,进程才可以对该文件进行读写操作;F_TLOCK指令是指试图锁定整个文件,如果出现锁冲突,则不会阻塞进程,而是返回EAGAIN错误;F_ULOCK指令是指解除文件的锁定;F_TEST指令是指测试文件的锁定情况,如果文件已经被锁定,则返回-1,否则返回0。 在使用lockf函数时需要注意以下几点: 1、lockf函数并不是实现进程间通信的机制,只是用来对多个进程对文件进行访问的控制; 2、使用lockf时需要同步一致地运用操作锁定与解除锁定的指令,以避免死锁的情况; 3、lockf锁定文件的范围不应该超出文件的范围; 4、使用lockf时,如果出现了系统中断等问题,需要及时处理,以防止文件无法被正常解锁。 总之,lockf函数是一种实现进程对文件并发访问控制的有效工具,在Linux系统中具有广泛的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值