C语言非常道 6.6.3 逐位 & | ^ 三种运算符

/**********************c0608.c*********************/
# include <unistd.h>
# include <fcntl.h>
# include <sys/stat.h>

int main (void)
{
    int fd;
    fd = open ("myfile1.dat", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);

    if (fd == -1) return -1;

    char name [] = "LiuChangjiang", gender = 'M', age = 36;
    unsigned int score = 2200;

    write (fd, name, strlen (name));
    write (fd, & gender, sizeof gender);
    write (fd, & age, sizeof age);
    write (fd, & score, sizeof score);

    close (fd);
}

利用这个代码顺带讲解了三个运算符
三个运算符均需要两个操作数,且必须都是整型操作数
| : 有一边为1则为1
& : 两边为1才能为1
^ : 不同为1,相同为0

代码使用了open(const char * pathname, int oflag ); 函数, 是在<fcntl.h>
第一个参数是指针,一般来说是给一个字符串,上面chua的程序给了字面串,将创建一个隐藏的数组,进而转化为指针指向数组中第一个元素,
并且由于字面串创建的数组内容不能被修改,刚好第一个参数的指针是用const限定的指针类型,内容是也不能被修改,所以可以直接利用字面串当参数
第二个参数是文件打开的方式,类型是int,
上述程序中: 使用O_CREAT 和 O_RDWR,作为第二个参数,使用的是变量式宏定义,位于头文件 <fcntl.h>,通常是;
#define O_CREAT 00000002
#define O_RDWR 00000100
被定义为两个八进制的整型常量
一般来说程序中都会判断所对应的二进制的每个位,每个宏都只负责一个标志位,O_RDWR,仅对应于文件打开方式的第二个bit,意思是创建或者打开文件的目的是既读又写;O_CREAT仅对应于文件打开方式的第7个bit位,文件不存在则创建它

第二个参数具体怎样去判断状态位(不明白)

第三个参数是许可权限标志,用于哪些人能够打开这个文件,参数的类型是int
S_IRUSR | S_IWUSR 位于头文件 # include <sys/stat.h> 中,前一个意味着只有文件的创建者才能读这个文件,后者意味着只有文件的创建者才能写入这个文件
open函数返回一个整数代表这个文件,叫做文件描述符或者文件句柄,在程序的运行期间,可以利用描述符来读写这个文件。
操作系统会对每个打开的文件记录他们的属性和各种状态,,根据这些信息对文件进行操作,操作系统使用文件描述符定位每个文件的属性和状态信息的线索与把柄
如果open函数成功打开或创建了文件,则它返回该文件的描述符,负责返回-1,程序中 fd 用来接收这个返回值

第三个参数怎样使用也不明白

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值