linux下编程没有输入文件内容,linux 下文件I/O编程 (open、read、write、lseek、close)...

通常,一个进程打开时,都会打开3个文件:标准输入、标准输出和标准出错处理。这3个文件分别对应文件描述符为0、1和2(也就是宏替换STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO)。

不带缓存的文件I/O操作,这里指的不带缓存是指每一个函数只调用系统中的一个函数。主要用到5个函数:open、read、write、lseek和close。

open函数语法要点

所需头文件:#include//提供类型pid_t的定义

#include

#include

函数原型:int open(const char *pathname,flags,int perms)

函数传入值:

path:被打开文件名(可包括路径名)

flag:文件打开的方式,参数可以通过“|”组合构成,但前3个参数不能互相重合。

O_REONLY:只读方式打开文件

O_WRONLY:可写方式打开文件

O_RDWR:读写方式打开文件

O_CREAT:如果文件不存在时就创建一个新文件,并用第三个参数为其设置权限。

O_EXCL:如果使用O_CREAT时文件存在,则可返回错误信息。这一参数可测试文件是否存在。

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

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

O+APPEND:以添加方式打开文件,在打开文件的同时,文件指针指向文件末尾。

perms:被打开文件的存取权限,为8进制表示法。

函数返回值:成功:返回文件描述符 失败:-1

Close 语法要点

所需头文件:#include

函数原型:int close(int fd)

函数输入值:fd:文件描述符

函数返回值:成功:0          出错:-1

Read函数语法要点所需头文件:#include

函数原型:ssize_t read(int fd,void *buf,size_t count)

函数传入值

fd:文件描述符

Buf:指定存储器读出数据的缓冲区

Count:指定读出的字节数

函数返回值:成功:读出的字节数  0:已到达文件尾    -1:出错

在读普通文件时,若读到要求的字节数之前已达到文件的尾部,则返回字节数会小于希望读出的字节数。

Write函数语法要点

所需头文件:#include

函数原型:  ssize_t write(int fd,void *buf,size_t count)

函数传入值:

fd:文件描述符

Buf:指定存储器写入数据的缓冲区

Count:指定读出的字节数

函数返回值:成功:已写的字节数     -1:出错

Lseek函数语法要点:

所需头文件:#include

#include

函数原型:off_t lseek(int fd,off_t offset,int whence)

函数传入值:

fd:文件描述符

Offset:偏移量,每一读写操作所需要移动的距离,单位是字节的数量,可正可负(向前移,向后移)

Whence:当前位置的基点:

SEEK_SET:当前位置为文件开头,新位置为偏移量的大小

SEEK_CUR:当前位置为文件指针位置,新位置为当前位置加上偏移量

SEEK_END:当前位置为文件的结尾,新位置为文件的大小加上偏移量大小

函数使用实例:

/**/

#include

#include

#include

#include

#include

#include

#include

int main(void)

{

char *buf="Hello! I'm writing to this file!";

char buf_r[11];

int fd,size,len;

len = strlen(buf);

buf_r[10] = '\0';

/*首先调用open函数,并指定相应的权限*/

if ((fd = open("hello.c", O_CREAT | O_TRUNC | O_RDWR,0666 ))<0) {

perror("open:");

exit(1);

} else

printf("open and create file:hello.c %d  OK\n",fd);

/*调用write函数,将buf中的内容写入到打开的文件中*/

if ((size = write( fd, buf, len)) < 0){

perror("write:");

exit(1);

} else

printf("Write:%s OK\n",buf);

/*调用lseek函数将文件指针移动到文件起始,并读出文件中的10个字节*/

lseek(fd, 0, SEEK_SET );

if ((size = read( fd, buf_r, 10))<0) {

perror("read:");

exit(1);

} else

printf("read form file:%s OK\n",buf_r);

if ( close(fd) < 0 )    {

perror("close:");

exit(1);

} else

printf("Close hello.c OK\n");

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值