c语言open()

c语言open()函数问题

O_TRUNC的意思是:如果文件存在,而且为只读或只写成功打开,就把文件长度截短为0。

明白了这段话,你就知道你错在哪了。

c 语言中打开文件的函数名为

C语言open()函数:打开文件函数

相关函数:read, write, fcntl, close, link,stat, umask, unlink, fopen

头文件:#include sys/types.h #includesys/stat.h #include fcntl.h

定义函数:

intopen(const char * pathname, int flags);

intopen(const char * pathname, int flags, mode_t mode);

函数说明:

参数 pathname 指向欲打开的文件路径字符串. 下列是参数flags 所能使用的旗标:

O_RDONLY 以只读方式打开文件

O_WRONLY 以只写方式打开文件

O_RDWR 以可读写方式打开文件. 上述三种旗标是互斥的, 也就是不可同时使用, 但可与下列的旗标利用OR(|)运算符组合.

O_CREAT 若欲打开的文件不存在则自动建立该文件.

O_EXCL 如果O_CREAT 也被设置, 此指令会去检查文件是否存在. 文件若不存在则建立该文件, 否则将导致打开文件错误. 此外, 若O_CREAT 与O_EXCL 同时设置, 并且欲打开的文件为符号连接, 则会打开文件失败.

O_NOCTTY 如果欲打开的文件为终端机设备时, 则不会将该终端机当成进程控制终端机.

O_TRUNC 若文件存在并且以可写的方式打开时, 此旗标会令文件长度清为0, 而原来存于该文件的资料也会消失.

O_APPEND 当读写文件时会从文件尾开始移动, 也就是所写入的数据会以附加的方式加入到文件后面.

O_NONBLOCK 以不可阻断的方式打开文件, 也就是无论有无数据读取或等待, 都会立即返回进程之中.

O_NDELAY 同O_NONBLOCK.

O_SYNC 以同步的方式打开文件.

O_NOFOLLOW 如果参数pathname 所指的文件为一符号连接, 则会令打开文件失败.

O_DIRECTORY 如果参数pathname 所指的文件并非为一目录, 则会令打开文件失败。注:此为Linux2. 2 以后特有的旗标, 以避免一些系统安全问题.

参数mode 则有下列数种组合, 只有在建立新文件时才会生效, 此外真正建文件时的权限会受到umask 值所影响, 因此该文件权限应该为 (mode-umaks).

S_IRWXU00700权限, 代表该文件所有者具有可读、可写及可执行的权限.

S_IRUSR或S_IREAD, 00400 权限,代表该文件所有者具有可读取的权限.

S_IWUSR或S_IWRITE, 00200 权限, 代表该文件所有者具有可写入的权限.

S_IXUSR或S_IEXEC, 00100 权限,代表该文件所有者具有可执行的权限.

S_IRWXG00070 权限, 代表该文件用户组具有可读、可写及可执行的权限.

S_IRGRP00040 权限, 代表该文件用户组具有可读的权限.

S_IWGRP00020 权限, 代表该文件用户组具有可写入的权限.

S_IXGRP00010 权限, 代表该文件用户组具有可执行的权限.

S_IRWXO00007 权限, 代表其他用户具有可读、可写及可执行的权限.

S_IROTH00004 权限, 代表其他用户具有可读的权限

S_IWOTH00002 权限, 代表其他用户具有可写入的权限.

S_IXOTH00001 权限, 代表其他用户具有可执行的权限.

返回值:若所有欲核查的权限都通过了检查则返回0 值, 表示成功, 只要有一个权限被禁止则返回-1.

错误代码:

EEXIST参数pathname 所指的文件已存在, 却使用了O_CREAT 和O_EXCL旗标.

EACCESS参数pathname 所指的文件不符合所要求测试的权限.

EROFS 欲测试写入权限的文件存在于只读文件系统内.

EFAULT参数pathname 指针超出可存取内存空间.

EINVAL参数mode 不正确.

ENAMETOOLONG参数 pathname 太长.

ENOTDIR参数pathname 不是目录.

ENOMEM核心内存不足.

ELOOP 参数pathname 有过多符号连接问题.

EIOI/O 存取错误.

附加说明:使用access()作用户认证方面的判断要特别小心, 例如在access()后再作open()空文件可能会造成系统安全上的问题.

范例

#includeunistd.h

#includesys/types.h

#includesys/stat.h

#includefcntl.h

main()

{

intfd, size;

chars[] = “Linux Programmer!\n”, buffer[80];

fd =open(“/tmp/temp”, O_WRONLY|O_CREAT);

write(fd, s, sizeof(s));

close(fd);

fd =open(“/tmp/temp”, O_RDONLY);

size= read(fd, buffer, sizeof(buffer));

close(fd);

printf(“%s”, buffer);

}

执行

LinuxProgrammer!

c语言open()

c 语言open()函数

windows下的文件操作,一般都用C语言的文件函数,其中文件打开函数fopen

fopen函数用来打开一个文件,其调用的一般形式为:

文件指针名=fopen(文件名,使用文件方式)

其中,“文件指针名”必须是被说明为FILE 类型的指针变量,“文件名”是被打开文件的文件名。 “使用文件方式”是指文件的类型和操作要求。“文件名”是字符串常量或字符串数组。例如:

FILE *fp;

fp=(“file a”,”r”);

其意义是在当前目录下打开文件file a, 只允许进行“读”操作,并使fp指向该文件。

又如:

FILE *fphzk

fphzk=(“c:\\hzk16′,”rb”)

其意义是打开C驱动器磁盘的根目录下的文件hzk16, 这是一个二进制文件,只允许按二进制方式进行读操作。两个反斜线“\\ ”中的第一个表示转义字符,第二个表示根目录。使用文件的方式共有12种,下面给出了它们的符号和意义。

文件使用方式 意 义

“rt” 只读打开一个文本文件,只允许读数据

“wt” 只写打开或建立一个文本文件,只允许写数据

“at” 希望在文件内追加内容,打开一个文本文件,并在文件末尾写数据

“rb” 只读打开一个二进制文件,只允许读数据

“wb” 只写打开或建立一个二进制文件,只允许写数据

“ab” 追加打开一个二进制文件,并在文件末尾写数据

“rt+” 读写打开一个文本文件,允许读和写

“wt+” 读写打开或建立一个文本文件,允许读写

“at+” 读写打开一个文本文件,允许读,或在文件末追加数 据

“rb+” 读写打开一个二进制文件,允许读和写

“wb+” 读写打开或建立一个二进制文件,允许读和写

“ab+” 读写打开一个二进制文件,允许读,或在文件末追加数据

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月26日 02:53:45
下一篇 2024年3月26日 03:03:59

相关推荐

  • c语言流程图最大值,c语言程序流程图有哪三种表示方法

    C语言小题,用传统流程图表示:依次将10个数输入,要求输出其中最大的数… 1、传统流程图如下图所示:流程图思路详解:(1)定义三个变量,分别是i(用于循环计数)、m(保存相对较大的数值)、a(输入的数值)。(2)给循环变量i赋值。 2、将第一个输入的数字赋给一个变量,比如是x,那么将后续输入的数跟x比较,将大的数再赋给X,等输入完后,最大的数就是…

    2024年5月18日
    3500
  • pic18系列单片机c语言应用实例,pic18系列单片机原理及c语言开发书籍

    PIC18F458单片机端口C语言初始化成普通I/O口 1、而51单片机的所有IO引脚,在启动后默认都是1。因此,如之前没有对此引脚进行过置0操作的话,可以直接读该引脚。但为了保险起见,也为了使程序通用、可移植,最好在读取之前对此引脚置1。 2、复位后IO脚为输入状态。默认是普通的IO口作为数字式输入模式,就是对应tris位被配置成1。而如果这个IO引脚复用…

    2024年5月18日
    4900
  • c语言非,c语言非法表达式怎么判断

    c语言中,如何表示非? C语言中的非有两种: 逻辑非。逻辑非为逻辑运算,符号为!,即叹号。手写时写叹号即可,电脑输入时为shift + 左右shift均可。 位运算非。位运算非为位运算的一种,符号为~,即波浪号。 逻辑非 在C语言中逻辑非用!表示。举例:!a(a代表一个条件)如果a为假,则!a为真,如果a为真,则!a为假。 表示当两个条件中有任一个条件满足,…

    2024年5月18日
    3800
  • c语言冒号格式字符串,c语言冒号的用法

    c语言中冒号什么意思 这是c语言的三目运算符。对于条件表达式bx:y,先计算条件b,然后进行判断。如果b的值为true,计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值。一个条件表达式从不会既计算x,又计算y。 C语言里两个冒号的意思有三个:(1)表示“域操作符”。 结构体中的冒号表示位域。位域出现的原因是由于某些信息的存储表示只需要几个bi…

    2024年5月18日
    3000
  • c语言常见函数编程,c语言经典函数

    c语言函数编程 1、c语言编程利用自定义函数求两个数的和的方法如下:首先需要定义一个自定义函数,命名为sum,参数为两个整数a和b,返回值为整数类型。在自定义函数中,使用return语句返回a和b的相加结果。 2、C语言中一个完整的函数由函数首部和函数体构成,而且定义函数时两者都是必不可少的。 3、从键盘输入一个英文字母,要求按字母的顺序打印出3个相邻的字母…

    2024年5月18日
    3700
  • c语言编程圆周率,c语言圆周率代码

    C语言编程求出圆周率的近似值。 c语言编程题 计算圆周率的近似值,计算公式为:e=1+1/1!+1/2!+1/3!+1/4!+1/ c语言编程题计算圆周率的近似值,计算公式为:e=1+1/1!+1/2!+1/3!+1/4!+1/5!+1/6!+…(计算至最后一项约等于0)。 算法错误。程序思路非常混乱。n++只一次,并没有循环,那么一开始计算x0…

    2024年5月18日
    3900
  • c语言字符串变量比较大小写,c语言字符串比较大小的代码

    单片机C语言字符串对比问题 C语言字符串对比可以调用标准库函数strcmp。 C语言中的字符类型即char类型,一般情况占1个字节,因此一般使用char类型来描述字节数组。比如char sz_byte[256];有时候为了阅读文件,会将char类型说明为BYTE类型。需要借助于typedef关键字。 C语言中字符是使用char来定义的,使用关系运算符(,=)…

    2024年5月18日
    6300
  • c语言怎样读取已存在文件,c语言读取文件内容并保存到char中

    请问C语言对文件的读取有哪些函数,都有什么功能?像fseek();fscanf… 1、fread:是读取数据 fwrite:是写入数据 函数功能 用来读写一个数据块。 2、`printf()` 函数:用于输出信息到控制台或者文件,可以输出各种类型的数据,例如整数、浮点数、字符、字符串等。它的格式字符串可以通过占位符来指定输出数据的格式,类似于其他…

    2024年5月18日
    3300
  • 输出一个小数的循环节c语言,输入循环小数

    如何利用C语言实现小数输出? 1、利用C语言使输出值为小数的编程方法和思想如下:首先需要定义一个变量作为后续需要输出的数。这里以定义一个变量a为例。需要注意的是,整型int是不支持转化的。 2、按F5运行,得到结果。float a,b,c;意思是设置三个名为a,b,c的浮点变量,区别于整形变量(int a,b,c;)和字符串变量(char a,b,c;),浮…

    2024年5月18日
    3300
  • c语言编程思想pdf,C语言编程思想与方法

    请教2道C语言题目的编程思想 第一个的编程思想实现一个二维数组的循环输入和循环输出,执行过程如下:先在main()函数里边循环输入数组的元素,依次输入四个一共输入三次。 break;case 1:op=+;break;case 2:op=-;break;} if (n%3) str[ptr++]=op; /*记录运算模式*/ str[ptr++]=0+j;n…

    2024年5月18日
    4200

发表回复

登录后才能评论



关注微信