unix c中的fcntl函数fcntl(fd,F_GETFL,0)

问题描述

unix c中的fcntl函数fcntl(fd,F_GETFL,0)

看到书上有这句话(不懂):
F_GETFL 对应于filedes 的文件状态标志作为函数值返回。在说明 open函数时,已说明了文件状态标志 不幸的是,三个存取方式标志 (O_RDONLY,O_WRONLY,以及O_RDWR)并不各占1位。(正如前述,这三种标志的值各是 0、1和2,由于历史原因。这三种值互斥 — 一个文件只能有这三种值之一。 )因此首先必须用屏蔽字 O_ACCMODE相与 取得存取方式位,然后将结果与这三种值相比较。
fcntl(fd,F_GETFL,0)操作返回的结果是什么???
代码测试:返回不懂
/**
fcntl——manipulate(/m??n?pj?le?t;) file descriptor
**/

#include
#include
#include
#include
#include

int main(){

int fd;
int power;

if((fd = open("/home/hq/example/mydocs/linux",O_RDONLY | O_CREAT)) == -1){
    printf("open failed!n");
    return 0;
}
//得到进程文件的描述符标志
if((power = fcntl(fd,F_GETFL,0)) ==-1){
    printf("fcntl failed!n");
    return 0;
}
printf("%d--n",power);

return 0;

}

解决方案

fcntl()用来操作文件描述符的一些特性。fcntl 不仅可以施加建议性锁,还可以施加强制锁。同时,fcntl还能对文件的某一记录进行上锁,也就是记录锁。
cntl的返回值与命令有关。如果出错,所有命令都返回-1,如果成功则返回某个其他值。下列四个命令有特定返回值:F_DUPFD、F_GETFD、F_GETFL、F_GETOWN.第一个返回新的文件描述符,接下来的两个返回相应标志,最后一个返回一个正的进程ID或负的进程组ID。

时间: 2024-12-10 17:27:42

unix c中的fcntl函数fcntl(fd,F_GETFL,0)的相关文章

unix系统编程-关于apue第三章fcntl函数

问题描述 关于apue第三章fcntl函数 其中的if(val & O_APPEND )是什么意思,还有就是fcntl(fdF_SETFL0):和fcntl(fdF_GETFL0)第三个参数设置为0 分别是什么意思 解决方案 fcntl()函数fcntl函数fcntl 函数

linux c fcntl函数返回值

问题描述 linux c fcntl函数返回值 if((val = fcntl(fd,F_GETFL,0))<0) ....... val |= O_NONBLOCK; if(fcntl(fd,F_SETFL,val)<0) ....... 设置非阻塞. 第三行为什么能这样设,val不是反回文件描述符fd么? 解决方案 fcntl函数原型为:int fcntl(int fd, int cmd, long arg); 其中cmd支持的命令有多种,其中设置文件描述词的状态,可选的类型有O_APPE

UNIX环境高级编程:记录上锁(fcntl函数)以及死锁检测

一.记录锁 record locking 功能:当一个进程正在读或修改文件的某个部分时,它可以阻止其它进程修改同一文件区. 字节范围锁 byte-range locking 二.历史 flock函数,可以锁整个文件,不能锁文件中的一部分. fcntl函数,增加了记录锁的功能. lockf函数,在fcntl基础上构造了lockf函数,提供一个简化的接口.可以锁文件中任意字节数的区域 三.fcntl 记录锁 函数原型: int fcntl(int fd, int cmd, struct flock

UNIX网络编程:fcntl函数

fcntl函数提供了与网络编程相关的如下特性: 非阻塞式I/O.  通过使用F_SETFL命令设置O_NONBLOCK文件状态标志,我们可以把一个套接字设置为非阻塞型. 信号驱动式I/O. 通过使用F_SETFL命令设置O_ASYNC文件状态标志,我们可以把一个套接字设置成O_ASYNC,一旦其状态发生变化,内核就产生一个SIGIO信号. F_SETOWN命令允许我们指定用于接收SIGIO和SIGURG信号的套接字属主(进程ID或进程组ID).其中SIGIO信号是套接字被设置为信号驱动式I/O型

fcntl函数的使用详解_C 语言

(1)fcntl函数说明 前面的这5个基本函数实现了文件的打开.读写等基本操作,这一节将讨论的是,在文 件已经共享的情况下如何操作,也就是当多个用户共同使用.操作一个文件的情况,这时,Linux 通常采用的方法是给文件上锁,来避免共享的资源产生竞争的状态. 文件锁包括建议性锁和强制性锁. 建议性锁要求每个上锁文件的进程都要检查是否有锁存,并且尊重已有的锁.在一般情况下,内核和系统都不使用建议性锁.强制性锁是由内 核执行的锁,当一个文件被上锁进行写入操作的时候,内核将阻止其他任何文件对其进行读写操

linux系统编程之文件与I/O(六) fcntl函数与文件锁

一.fcntl函数 功能:操纵文件描述符,改变已打开的文件的属性 int fcntl(int fd, int cmd, ... /* arg */ ); cmd的取值可以如下: 复制文件描述符 F_DUPFD (long) 设置/获取文件描述符标志 F_GETFD (void) F_SETFD (long) 设置/获取文件状态标志 F_GETFL (void) F_SETFL (long) 获取/设置文件锁 F_GETLK F_SETLK,F_SETLKW 其中复制文件描述符可参见<linux系

fcntl ubuntu c-关于fcntl函数的奇怪现象,求大神解决

问题描述 关于fcntl函数的奇怪现象,求大神解决 memset(&wflk,0,sizeof(struct flock)); wflk.l_type = F_WRLCK; wflk.l_whence = 0; wflk.l_start = SEEK_SET; wflk.l_len = 0; fcntl(fd, F_SETLK, &wflk); if(wflk.l_type==F_UNLCK){ printf("lock has F-UNLCK1n"); } else{

PHP技巧:PHP脚本编程中的文件系统函数库

basename: 返回不含路径的文件字符串. chgrp: 改变文件所属的群组. chmod: 改变文件的属性. chown: 改变文件的拥有者. clearstatcache: 清除文件状态快取. copy: 复制文件. delete: 无用的项目. dirname: 取得路径中的目录名. diskfreespace: 取得目录所在的剩余可用空间. fclose: 关闭已打开的文件. feof: 测试文件指针是否指到档尾. fgetc: 取得文件指针所指的字符. fgetcsv: 取得文件指

MYSQL教程:UNIX时间戳和日期转换函数

UNIX时间戳转换为日期用函数: FROM_UNIXTIME() select FROM_UNIXTIME(1156219870); 日期转换为UNIX时间戳用函数: UNIX_TIMESTAMP() Select UNIX_TIMESTAMP('2006-11-04 12:23:00′); 例:mysql查询当天的记录数: $sql="select * from message Where DATE_FORMAT(FROM_UNIXTIME(chattime),'%Y-%m-%d') = DA