open在使用O_RDWR时

本文通过两个C语言程序实例,探讨了文件打开模式对读写操作的影响。实验对比了不同open函数参数设置下,从标准输入读取数据并写入文件,随后再次读取的过程和结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    我在使用管道时候,有一段是关于一个进程在创建子进程后,子进程execl另一个已编写的pipe4,pipe4中read设备文件符file_descriptors[0]以获取数据,我在想关于'\n'是否会被识别到pipe4中(实际上能传入就能识别)。于是就想做个从标准端口输入,并写入文件test.txt中,再读出的实验。

   len1.c如下:

#include<string.h>

#include<stdio.h>

#include<stdlib.h>

#include<unistd.h>

#include<fcntl.h>

#include<sys/types.h>

#include<sys/stat.h>

int main()

{        int file;

        int res;

        char list[1024];

        memset(list,'\0',sizeof(list));

        file = open("test.txt",O_RDWR|O_CREAT,S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH);

        res = read(0,list,1024);

        printf("input %d characters\n",res);

        res = write(file,list,res);

        printf("write %d characters into test.txt .\n",res);

        res = read(file,list,1024);

        printf("read %d characters from test.txt \n%s\n", res ,list);

        exit(EXIT_SUCCESS);

}

结果:

I love you

input 11 characters

write 11 characters into test.txt .

read 0 characters from test.txt

I love you

最后res变成了0,说明最后读了test.txt,但是读出0个字符。list值没有变,大概是应为没有读出,维持原值。

(后来我在read操作前加入了:sprintf(list,"I like this game");。最后一行也变成了I like this game)

我改变源代码,len2.c:

#include<string.h>

#include<stdio.h>

#include<stdlib.h>

#include<unistd.h>

#include<fcntl.h>

#include<sys/types.h>

#include<sys/stat.h>

int main()

{

        int file;

        int res;

        char list[1024];

        memset(list,'\0',sizeof(list));

        file = open("test.txt",O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH);

        res = read(0,list,1024);

        printf("input %d characters\n",res);

        res = write(file,list,res);

        printf("write %d characters into test.txt .\n",res);

        close(file);

        file = open("test.txt",O_RDONLY);

        res = read(file,list,1024);

        printf("read %d characters from test.txt \n%s\n", res ,list);

        exit(EXIT_SUCCESS);

}

      结果如下:

I love you

input 11 characters

write 11 characters into test.txt .

read 11 characters from test.txt

I love you

结果正常,我想open的读写模式是否是只能先读后写(做实验成功,可行),而不能先写后读?又或者在open的O_RDWR后面还要与上一些其他的标示符?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值