1_Linux C 文件与IO操作

合集下载

C语言中的文件操作与IO流处理技巧

C语言中的文件操作与IO流处理技巧

C语言中的文件操作与IO流处理技巧C语言作为一门广泛应用于系统级编程和底层开发的编程语言,对文件操作与IO流处理有着重要的支持。

本文将介绍C语言中的文件操作和IO流处理技巧,帮助读者更好地理解和应用这些知识。

一、文件操作基础在C语言中,文件的操作主要涉及文件的打开、读写、关闭等操作。

下面将介绍一些常用的文件操作函数和技巧:1. 文件的打开与关闭使用C语言进行文件操作需要首先打开文件,并在操作完成后关闭文件。

打开文件可以使用`fopen()`函数,关闭文件使用`fclose()`函数。

下面是一个示例:```cFILE* fp;fp = fopen("file.txt", "r");// do somethingfclose(fp);```在打开文件时,需要指定文件名和打开模式。

常见的打开模式包括:- "r":只读模式,打开已存在的文件进行读取。

- "w":写入模式,打开文件进行写入,若文件不存在则创建新文件,若文件存在则清空原内容。

- "a":添加模式,打开文件进行写入,若文件不存在则创建新文件,若文件存在则在文件末尾添加内容。

- "b":二进制模式,与上述模式结合使用,表示以二进制格式进行文件的读写。

2. 文件内容的读取与写入通过`fread()`函数可以从文件中读取数据,通过`fwrite()`函数可以向文件中写入数据。

这两个函数的使用方式如下:```csize_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);```其中,`ptr`为数据读写的缓冲区地址,`size`为每个数据项的字节数,`nmemb`为数据项的个数,`stream`为待读写数据的文件。

linux程序设计课件 第5章-文件IO操作

linux程序设计课件 第5章-文件IO操作

5.1 Linux系统文件和文件系统
mode参数说明如下:
参数:mode S_IRUSR S_IWUSR S_IXUSR S_IRGRP S_IWGRP S_IXGRP S_IROTH S_IWOTH S_IXOTH
说明 所有者具有读取权限 所有者具有写入权限 所有者具有执行权限 组具有读取权限 组具有写入权限 组具有执行权限 其他用户具有读取权限 其他用户具有写入权限 其他用户具有执行权限
[root@localhost root]# ./5-3
系统原来的权限掩码是:123
系统新的权限掩码是:666
创建了文件liu1
系统原来的权限掩码是:666
系统新的权限掩码是:444
创建了文件liu2
---------- 1 root root
0 7月 17 20:59 liu1
--w--w--w- 1 root root
7
5.1 Linux系统文件和文件系统
例5.1:设计一个程序,应用system函数列出当前目录下的文件信息, 以及系统“/dev/sda1”和“/dev/lp0”的文件信息。
步骤 1:用vi 命令创建5-1.c文件 [root@localhost root]#vi 5-1.c
源程序 5-1.c
Linux 下的umask命令用于设置文件的权限屏蔽, 也就是指在建立文件时改变预设的权限,具体 说明如下:
例5.3:设计一个程序,应用umask函数设置系统 文件与目录的权限掩码。
源程序 5-3.c
16
5.1 Linux系统文件和文件系统
编译成功后,运行可执行文件5-3,此时程序运行结果在终端中显示如 下:
第5章 文件I/O操作
1. Linux系统的文件属性。 2. 不带缓存的文件I/O操作。 3. 基于流的文件I/O操作。 4. 特殊文件的操作。

linux io读写命令

linux io读写命令

linux io读写命令Linux文件I/O操作是指在Linux系统中对文件进行读取、写入和管理的一系列操作。

这些操作包括打开文件、读取文件内容、写入文件内容、关闭文件以及对文件属性进行管理等。

下面将详细介绍Linux文件I/O操作的基本原理和常用函数。

一、文件描述符在Linux中,每个打开的文件都会分配一个唯一的文件描述符(file descriptor),用于标识该文件。

文件描述符是一个非负整数,它代表了进程与文件之间的联系。

在C语言中,文件描述符一般使用整型变量来表示。

二、文件打开和关闭1、打开文件:要对文件进行读取或写入操作,首先需要使用open()函数打开文件,并将返回的文件描述符保存起来。

open()函数的原型如下所示:int open(const char*pathname, int flags); 其中,pathname表示要打开的文件路径,flags表示打开文件时的方式和选项,比如O_RDONLY表示只读方式打开,O_WRONLY表示只写方式打开,O_RDWR 表示读写方式打开等。

open()函数返回一个文件描述符,如果出错则返回-1。

2、关闭文件:在不再需要使用某个文件时,应该使用close()函数关闭文件。

close()函数的原型如下所示:int close(int fd); 其中,fd为要关闭的文件描述符。

关闭文件后,该文件描述符将不再可用,可以被重新利用。

三、文件读写操作1、读取文件:使用read()函数从已打开的文件中读取数据。

read()函数的原型如下所示:ssize_t read(int fd, void *buf, size_t count); 其中,fd为要读取的文件描述符,buf为存放读取数据的缓冲区,count为要读取的字节数。

read()函数返回实际读取的字节数,如果出错则返回-1。

2、写入文件:使用write()函数向已打开的文件中写入数据。

write()函数的原型如下所示:ssize_t write(int fd, const void *buf, size_t count); 其中,fd为要写入的文件描述符,buf为待写入数据的缓冲区,count为要写入的字节数。

linux 基础io的使用

linux 基础io的使用

linux 基础io的使用如何在Linux 中使用基础I/O(Input/Output)。

I/O 是计算机系统中非常重要的一部分,用于处理数据的输入和输出。

在Linux 系统中,有多种方法可以执行I/O 操作,包括标准输入输出(stdin/stdout)、文件I/O 和网络I/O。

本文将逐步介绍这些常用的I/O 方法及其使用。

1. 标准输入输出(stdin/stdout):在Linux 中,stdin 表示标准输入,stdout 表示标准输出。

这两个文件描述符分别与键盘输入和终端输出相关联。

下面是如何使用标准输入输出进行基础的I/O 操作的示例:c#include <stdio.h>int main() {int number;printf("请输入一个整数:");scanf("%d", &number);printf("您输入的整数是:%d\n", number);return 0;}在上面的示例中,我们使用了`printf` 函数来打印提示信息,并使用`scanf` 函数从标准输入中读取用户输入的整数。

之后,我们使用`printf` 函数再次打印用户输入的整数。

可以在终端中运行该程序,并观察输出结果。

2. 文件I/O:文件I/O 是使用文件进行输入输出操作的一种常用方法。

在Linux 中,文件可以是普通文件、设备文件或套接字文件等。

下面是如何在Linux 中进行文件I/O 操作的示例:c#include <stdio.h>int main() {FILE *file;char line[100];file = fopen("test.txt", "r"); 打开名为"test.txt" 的文件,以只读方式打开while (fgets(line, sizeof(line), file) != NULL) {printf("%s", line);}fclose(file); 关闭文件return 0;}在上面的示例中,我们使用了`fopen` 函数来打开一个文件,并将返回的文件指针保存在`file` 变量中。

linux文件IO编程

linux文件IO编程

linux文件I/O编程(open、read、write、lseek、close)Linux 提供的虚拟文件系统为多种文件系统提供了统一的接口,Linux 的文件编程有两种途径:基于Linux 系统调用;基于C 库函数。

这两种编程所涉及到文件操作有新建、打开、读写和关闭,对随机文件还可以定位。

通常,一个进程打开时,都会打开3 个文件:标准输入、标准输出和标准出错处理。

这3 个文件分别对应文件描述符为0 、1 和2 (也就是宏替换STDIN_FILENO 、STDOUT_FILENO 和STDERR_FILENO )。

一、Linux 系统调用不带缓存的文件I/O 操作,这里指的不带缓存是指每一个函数只调用系统中的一个函数。

主要用到5 个函数:open 、read 、write 、lseek 和close 。

1 、open 函数语法要点:所需头文件:#include<sys/types.h>// 提供类型pid_t 的定义#include<sys/stat.h>#include<fcntl.h>函数原型:int open(const char *pathname,flags,int perms)函数传入值:path :被打开文件名(可包括路径名)flag :文件打开的方式,参数可以通过“|”组合构成,但前3 个参数不能互相重合。

O_REONLY:只读方式打开文件O_WRONLY:可写方式打开文件O_RDWR :读写方式打开文件O_CREA T :如果文件不存在时就创建一个新文件,并用第三个参数为其设置权限。

O_EXCL :如果使用O_CREA T 时文件存在,则可返回错误信息。

这一参数可测试文件是否存在。

O_NOCTTY:使用本参数时,如文件为终端,那么终端不可以作为调用open ()系统调用的那个进程的控制终端。

O_TRUNC :如文件已经存在,并且以只读或只写成功打开,那么会先全部删除文件中原因数据。

Linux常用命令-io操作

Linux常用命令-io操作

Linux常⽤命令-io操作Linux-io操作标准输⼊和输出 标准输⼊和输出标准输⼊ stdin 0 默认接受来⾃键盘的输⼊标准输出 stdout 1 默认输出到终端窗⼝标准错误 stderr 2 默认输出到终端窗⼝ I/O重定向 把输出和错误重新定向到⽂件> 覆盖> 将stdout重定向到⽂件2> 把stderr重定向到⽂件&> 把所有输出重定向到⽂件 禁⽌/允许覆盖[root@centos ~]#set -C[root@centos ~]#> a.txt-bash: a.txt: ⽆法覆盖已存在的⽂件[root@centos ~]#set +C[root@centos ~]#> a.txt>> 追加>> 将stdout追加到⽂件2>> 把stderr追加到⽂件&>> 把所有输出追加到⽂件标准输出和错误输出各⾃定向到不同的⽂件ls b bbbbb > info.log 2> error.log合并所有输出&> 覆盖重定向&>> 追加重定向command > /path/to/file.out 2>&1command >> /path/to/file.out 2>&1():合并多个程序的stdout/dev/null ⽆限接收的⽆底洞 tr 替换或者删除字符tr 'a-z''A-Z' </etc/issue[root@localhost jiangyi]#tr ab 12ab12[root@localhost jiangyi]#tr abc 12 如果后⾯的位数不⾜的话,则⽤最后⼀位补齐abc122ab12tr -d abc < issue > issue2 从定向不能为原来的⽂件,如果说为原来的⽂件,则⽂件情况-t ⽤来截断[root@localhost jiangyi]#tr -t abcd 12abcd12cdcdcd-s 压缩去重[root@localhost jiangyi]#tr -s abcabcabcaaabbbcccccccccccccccccccccccccccccabc-c 取反[root@localhost jiangyi]#tr -sc abcaaaaaaaaaaaaaabbbbbbbbbbbbbbbccccccccccccccaaaaaaaaaaaaaabbbbbbbbbbbbbbbcccccccccccccc aaaaaaaaaaaaaaaaaabbbbbbbbbbbbbcccccccccccccccccdddddddddddddeeeeeeeeeeeeffffffffffffff aaaaaaaaaaaaaaaaaabbbbbbbbbbbbbcccccccccccccccccdef aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccc1111111111111111222222222222333333333333 aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccc123[root@localhost jiangyi]#tr -dc abc aaaaaaaaaaaaabbbbbbbbbbbbccccccccccccccccccdddddddddddddddwqweqweqwqeqwqwqwq wqqqqqqqqqqqqqqqqqqqqqqqqqctrl+d结束[root@localhost jiangyi]#tr -dc "abc\n"adsadaaaasadasdcxzczxaaccasdadwqaa[root@localhost jiangyi]#seq 1 10 >f1[root@localhost jiangyi]#tr -d "\n" <f1[root@localhost jiangyi]tr "\n"""<f1[root@localhost jiangyi] tr """\n" <f2 多⾏输⼊[root@localhost jiangyi]#cat >f1 <<EOF> 1> 2> 3> 4> 5> 6> 7>> 8> 9> EOF[root@localhost jiangyi]# cat > f4asdassadasdctrl+d结束 ctrl+c也可以两者区别第⼀种⽅式输出结束,⽂件才会产⽣第⼆⽅式,回车⼀次就会写⼊⽂件EOF 约定俗成(多⾏重定向不结束不会⽣成⽂件单⾏重定向回车⼀次就会写⼊⽂件) 管道管道使⽤“|”来连接命令命令1|命令2|命令3|。

linux 系统调用io过程

linux 系统调用io过程

linux 系统调用io过程在Linux系统中,I/O(输入/输出)是指计算机与外部设备之间的数据传输过程。

当应用程序需要与外部设备进行交互时(如读取文件、发送网络请求等),它会通过系统调用来请求操作系统执行相应的I/O操作。

下面是Linux系统调用I/O的一般过程:1. 打开文件,应用程序需要进行文件I/O时,首先需要打开文件。

它会调用系统调用函数(如open())并传递文件路径、打开模式等参数。

操作系统会检查权限并返回一个文件描述符(file descriptor),用于后续的I/O操作。

2. 读取数据,一旦文件被成功打开,应用程序可以调用read()系统调用来从文件中读取数据。

它会传递文件描述符、缓冲区地址和读取的字节数等参数。

操作系统会将数据从文件读取到应用程序提供的缓冲区中。

3. 写入数据,类似地,应用程序可以使用write()系统调用将数据写入文件。

它会传递文件描述符、数据缓冲区地址和要写入的字节数等参数。

操作系统会将数据从应用程序的缓冲区写入到文件中。

4. 定位文件指针,应用程序可以使用lseek()系统调用来移动文件指针,以便在文件中进行随机访问。

它会传递文件描述符、偏移量和起始位置等参数。

操作系统会将文件指针设置为指定位置,使得后续的读写操作可以在该位置进行。

5. 关闭文件,当应用程序结束对文件的操作时,应调用close()系统调用来关闭文件。

它会传递文件描述符作为参数。

操作系统会释放文件描述符,并确保所有的缓冲数据都被写入到文件中。

除了上述基本的文件I/O操作,Linux还提供了其他类型的I/O系统调用,如网络I/O、管道I/O等。

这些系统调用的过程类似于文件I/O,但在底层实现上有所不同。

需要注意的是,系统调用是应用程序与操作系统之间的接口,涉及到内核态和用户态的切换,因此相比于用户空间的函数调用,系统调用的开销更大。

为了提高I/O性能,Linux还提供了异步I/O、多路复用等机制,允许应用程序在进行I/O操作时能够同时处理其他任务。

C语言文件操作和IO教程

C语言文件操作和IO教程

C语言文件操作和IO教程章节一:C语言文件操作基础C语言中的文件操作是程序与外部文件之间进行数据交流的重要方式。

在进行文件操作之前,我们需要包含头文件 "stdio.h",该头文件中包含了进行文件操作所需的函数和定义。

1.1 文件基本概念文件是存储在存储介质上的一组数据。

在C语言中,文件可以分为文本文件和二进制文件两种类型。

文本文件以可读的ASCII 字符形式存储数据,而二进制文件以字节流形式存储数据。

1.2 文件指针在C语言中,文件指针用于对文件进行操作。

它是一个指向FILE结构体的指针,每个打开的文件都有一个相关的文件指针。

我们可以通过使用标准库函数fopen来打开一个文件,并获取该文件的指针。

1.3 文件的打开和关闭操作文件的打开通过调用fopen函数来实现,其原型为:FILE *fopen(const char *filename, const char *mode);其中filename为文件名,mode为打开方式,如"r"代表只读,"w"代表写,"a"代表追加等。

文件打开成功后,函数返回一个指向该文件的指针;否则返回NULL。

文件的关闭操作使用fclose函数,其原型为:int fclose(FILE *stream);其中stream为要关闭的文件指针。

关闭文件后,相关的文件资源将被释放。

1.4 文件读写操作1.4.1 单个字符的读写为了从文件中读取或写入一个字符,我们可以使用fgetc和fputc函数。

fgetc函数原型为:int fgetc(FILE *stream);其中stream为要读取的文件指针。

该函数返回读取到的字符,若读取失败则返回EOF。

fputc函数原型为:int fputc(int character, FILE *stream);其中character为要写入的字符,stream为要写入的文件指针。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Linux 文件与I/O操作Andrew Huang <bluedrum@>课程内容l系统调用l底层库函数l标准库函数l目录与文件维护系统调用l Linux 大部分的系统功能是通过系统调用(System Call)来实现的.如open,send之类.l这些函数在C程序调用起来跟标准C库函数(printf…)非常类似.但是实现机制完全不同.l库函数仍然是运行在Linux 用户空间程序.很多时候内部会调用系统调用.l但系统调用是内核实现的.在C库封装成函数.但通过系统软中断进行调用.–用time命令测试时间,系统时间实际就是系统调用时间累积l time ./demo1–用strace 可以跟踪一种程序系统调用使用情况l strace ./demo1 #不需要调试信息两者关系l可以参考C库函数malloc与系统调用sbrk的关系常见C标准库函数l printf,getch,scanfl strcpy,strcmp,strlenl memcpy,memcmp,memsetl fopen,fwrite,fread常见系统调用函数l进程控制:fork(),waitpid()l文件控制open(),write()l网络收发函数socket(),bind(),send(),write()l权限控制 access()l标准C的函数,应该在MSDN和Linux下的man都能同时查找联机帮助–并且声明定义在stdlib.h当中l而Linux系统调用只能用man查找相应帮助–大部分声明定义在unistd.h当中文件控制1. Linux文件结构l Linux环境中的文件具有特别重要的意义,因为它们为操作系统服务和设备提供了一个简单而统一的接口.在Linux中,一切(或几乎一切)都是文件。

l通常程序完全可以像使用文件那样使用磁盘文件、串行口、打印机和其他设备。

l大多数情况下,你只需要使用五个基本的函数——open、close、read、write和ioctl l Linux中的任何事物都可以用一个文件代表,或者可以通过特殊的文件进行操作。

l一些特殊文件–目录–设备文件–/dev/console–/dev/tty–/dev/null2. 底层库函数l Linux 在底层实现一整套处理文件函数.–这一些函数能处理普通文件,网络socket文件,设备文件等–全部是系统调用实现的函数l文件处理函数–open –打开或创建一个文件–creat –建立一个空文件–close –关闭一个文件–read –从文件读入数据–write –向文件写入一个数据–lseek –在文件中移动读写位置–unlink –删除一个文件–remove –删除一个文件本身–fcntl –控制一个文件属性文件描述符l值为一个非负整数l用于表示一个打开文件l在内核空间被引用,并且由系统调用(open)所创建l read,write使用文件描述符l内核缺省打开三个文件描述符–1-标准输出–2-错误输出–0-标准输入1)open –-- 打开或创建一个文件open(打开文件)相关函数read,write,fcntl,close,link,stat,umask,unlink,fopen包含文件#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>定义函数int open( const char * pathname, int flags);int open( const char * pathname,int flags, mode_t mode);函数说明参数pathname 指向欲打开的文件路径字符串。

flags 标志位,参见下一页返回值若所有欲核查的权限都通过了检查则返回0 值,表示成功,只要有一个权限被禁止则返回-1。

范例#include<unistd.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>main(){int fd,size;char s [ ]=”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);}open的标志位l flags可以去下面的一个值或者是几个值的组合.–O_WRONLY 以只写方式打开文件–O_RDONLY 以只读方式打开文件–O_RDWR 以可读写方式打开文件。

上述三种旗标是互斥的,也就是不可同时使用,但可与下列的旗标利用OR(|)运算符组合。

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

–O_EXCL 如果O_CREAT 也被设置,此指令会去检查文件是否存在。

文件若不存在则建立该文件,否则将导致打开文件错误。

此外,若O_CREAT与O_EXCL同时设置,并且欲打开的文件为符号连接,则会打开文件失败。

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

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

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

多进程open同一个文件l open的打开的文件描述符,只在同一进程内是唯一的.换句话说,不同程序打开同名文件将会产生不同的描述符.l不同进程写同一个文件会产生互相覆盖情况,大部分情况是无法预知.这是相当危险的情况,一般要加入互锁和进程间通讯来防止这种情况发生.open mode标志位情况l如果使用了O_CREATE标志,那么我们要使用open的第二种形式.,mode用来表示文件的访问权限. (sys/stat.h.中定义)–S_IRUSR 用户可以读S_IWUSR 用户可以写–S_IXUSR 用户可以执行S_IRWXU 用户可以读写执行–S_IRGRP 组可以读S_IWGRP 组可以写–S_IXGRP 组可以执行S_IRWXG 组可以读写执行–S_IROTH 其他人可以读S_IWOTH 其他人可以写–S_IXOTH 其他人可以执行S_IRWXO 其他人可以读写执行–S_ISUID 设置用户执行ID S_ISGID 设置组的执行IDl我们也可以用数字来代表各个位的标志.Linux总共用5个数字来表示文件的各种权限.00000.第一位表示设置用户ID.第二位表示设置组ID,第三位表示用户自己的权限位,第四位表示组的权限,最后一位表示其他人的权限.open返回值l错误代码–成功打开文件返回文件描述符,否则返回一个负数–EEXIST 参数pathname 所指的文件已存在,却使用了O_CREAT和O_EXCL标志。

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

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

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

–EINVAL 参数mode 不正确。

–ENAMETOOLONG 参数pathname太长。

–ENOTDIR 参数pathname不是目录。

–ENOMEM 核心内存不足。

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

–EIO I/O 存取错误。

2)close –关闭一个文件close(关闭文件)相关函数open,fcntl,shutdown,unlink,fclose表头文件#include<unistd.h>定义函数int close(int fd);函数说明当使用完文件后若已不再需要则可使用close()关闭该文件,二close()会让数据写回磁盘,并释放该文件所占用的资源。

参数fd为先前由open()或creat()所返回的文件描述词。

返回值若文件顺利关闭则返回0,发生错误时返回-1。

错误代码EBADF 参数fd 非有效的文件描述词或该文件已关闭。

附加说明虽然在进程结束时,系统会自动关闭已打开的文件,但仍建议自行关闭文件,并确实检查返回值。

范例参考open()close系统调用说明l close调用终止一个文件描述符fildes与其对应文件之间的关联。

文件描述符被释放并能够重新使用。

close调用成功就返回0,出错就返回-1。

l有时检查close调用的返回结果十分重要。

有的文件系统,特别是网络文件系统,可能不会在关闭文件之前报告文件写操作中出现的错误,因为执行写操作时,数据可能未被确认写入。

l运行中的程序能够一次打开的文件数目是有限制的。

这个限制由头文件limits.h中的OPEN_MAX常数定义,它会随着系统的不同而不同,但POSIX规范要求它至少要为16。

这个限制本身还会受到本地系统全局性限制的影响。

3)write –向文件写入一个数据write(将数据写入已打开的文件内)相关函数open,read,fcntl,close,lseek,sync,fsync,fwrite表头文件#include<unistd.h>定义函数ssize_t write (int fd,const void * buf,size_t count);函数说明write()会把参数buf所指的内存写入count个字节到参数fd所指的文件内。

当然,文件读写位置也会随之移动。

返回值如果顺利write()会返回实际写入的字节数。

当有错误发生时则返回-1,错误代码存入errno中。

错误代码EINTR 此调用被信号所中断。

EAGAIN 当使用不可阻断I/O 时(O_NONBLOCK),若无数据可读取则返回此值。

EADF 参数fd非有效的文件描述词,或该文件已关闭。

范例请参考open()。

write系统调用说明l系统调用write的作用是,把缓冲区buf的前nbytes个字节写入与文件描述符fildes关联的文件中。

它返回实际写入的字节数。

如果文件描述符有错或者底层的设备驱动程序对数据块长度比较敏感,该返回值可能会小于nbytes。

如果这个函数的返回值是0 ,就表示未写出任何数据,如果是-1,就表示在write调用中出现了错误,对应的错误代码保存在全局变量errno里面。

–参见simple_write.c–write可能会报告说它写入的字节比你要求的少。

相关文档
最新文档