Linux C write函数
#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>#include<...
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#define FILENAME "/home/test.txt"
#define FLAGS O_WRONLY | O_CREAT | O_TRUNC
#define MODE 0666
int main(void)
{
char buf1[ ]={"abcdefghij"};
char buf2[ ]={"1234567890"};
int fd;
int count;
const char *pathname=FILENAME;
if ((fd=open(pathname, FLAGS, MODE)==-1))
{
printf("error, open file failed!\n");
exit(1);
}
count=strlen(buf1);
if (write(fd, buf1, count)!=count)
{
printf("error, write file failed!\n");
exit(1);
}
if (lseek(fd, 50, SEEK_SET)==-1)
{
printf("error, lseek failed!\n");
exit(1);
}
count=strlen(buf2);
if (write(fd, buf2, count) != count)
{
printf("error, write file failed!\n");
exit(1);
}
return 0;
}
/*
gcc -o hole hole.c
./hole
ls /home/test.txt
od -c /home/test.txt
*/
求指点:为什么/home/test.txt文件总是为0字节,内容并没有写到文件中 展开
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#define FILENAME "/home/test.txt"
#define FLAGS O_WRONLY | O_CREAT | O_TRUNC
#define MODE 0666
int main(void)
{
char buf1[ ]={"abcdefghij"};
char buf2[ ]={"1234567890"};
int fd;
int count;
const char *pathname=FILENAME;
if ((fd=open(pathname, FLAGS, MODE)==-1))
{
printf("error, open file failed!\n");
exit(1);
}
count=strlen(buf1);
if (write(fd, buf1, count)!=count)
{
printf("error, write file failed!\n");
exit(1);
}
if (lseek(fd, 50, SEEK_SET)==-1)
{
printf("error, lseek failed!\n");
exit(1);
}
count=strlen(buf2);
if (write(fd, buf2, count) != count)
{
printf("error, write file failed!\n");
exit(1);
}
return 0;
}
/*
gcc -o hole hole.c
./hole
ls /home/test.txt
od -c /home/test.txt
*/
求指点:为什么/home/test.txt文件总是为0字节,内容并没有写到文件中 展开
4个回答
展开全部
好隐蔽的一个错误!! if ((fd=open(pathname, FLAGS, MODE)==-1)) 这句,括号的位置错误了
应该是: if ( (fd=open(pathname, FLAGS, MODE))==-1)
原写法,导致fd值为0,成了标准输入(终端)了,所以,lseek就会一直报错!
应该是: if ( (fd=open(pathname, FLAGS, MODE))==-1)
原写法,导致fd值为0,成了标准输入(终端)了,所以,lseek就会一直报错!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-05-15
展开全部
写完后一定要调用flush()函数,不然写的数据都丢在缓冲区了,没来地从缓冲区写到磁盘上 程序就结束了= =#
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
就是返回写入的字节数啊 ,你是说的写文件不
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.功能
将数据写入已打开的文件内
2.相关函数
open,read,fcntl,close,lseek,sync,fsync,fwrite
3.表头文件
#include<unistd.h>
4.定义函数
ssize_t write (int fd,const void * buf,size_t count);
5.函数说明
write()会把参数buf所指的内存写入count个字节到参数fd所指的文件内。当然,文件读写位置也会随之移动。
6.返回值
如果顺利write()会返回实际写入的字节数。当有错误发生时则返回-1,错误代码存入errno中。
7.错误代码
EINTR 此调用被信号所中断。
EAGAIN 当使用不可阻断I/O 时(O_NONBLOCK),若无数据可读取则返回此值。
EBADF 参数fd非有效的文件描述词,或该文件已关闭。
将数据写入已打开的文件内
2.相关函数
open,read,fcntl,close,lseek,sync,fsync,fwrite
3.表头文件
#include<unistd.h>
4.定义函数
ssize_t write (int fd,const void * buf,size_t count);
5.函数说明
write()会把参数buf所指的内存写入count个字节到参数fd所指的文件内。当然,文件读写位置也会随之移动。
6.返回值
如果顺利write()会返回实际写入的字节数。当有错误发生时则返回-1,错误代码存入errno中。
7.错误代码
EINTR 此调用被信号所中断。
EAGAIN 当使用不可阻断I/O 时(O_NONBLOCK),若无数据可读取则返回此值。
EBADF 参数fd非有效的文件描述词,或该文件已关闭。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询