当前位置:首页 » 操作系统 » fprintflinux

fprintflinux

发布时间: 2024-04-13 02:51:18

1. linux socket编程 双线程同时读写缓冲流时为什么fprintf被阻塞了

你用fprintf读写socket?如果是,那么应该改成send或者write因为fprintf第一个参数为FILE *而文件描述符的是int类型上就有问题。如果不是,那么会不会两个线程同时读取一个socket接口,而当时数据正好被另一个线程所读取,而导致一个线程所阻塞。

2. 在Linux下用c语言编程

4。守护进程的创建
如果你在DOS时代编写过程序,那么你也许知道在DOS下为了编写一个常驻内存的程序我们要编写多少代码了.相反如果在Linux下编写一个"常驻内存"的程序却是很容易的.我们只要几行代码就可以做到. 实际上由于Linux是多任务操作系统,我们就是不编写代码也可以把一个程序放到后台去执行的.我们只要在命令后面加上&符号SHELL就会把我们的程序放到后台去运行的. 这里我们"开发"一个后台检查邮件的程序.这个程序每个一个指定的时间回去检查我们的邮箱,如果发现我们有邮件了,会不断的报警(通过机箱上的小喇叭来发出声音). 后面有这个函数的加强版本加强版本
后台进程的创建思想: 首先父进程创建一个子进程.然后子进程杀死父进程(是不是很无情?). 信号处理所有的工作由子进程来处理.

#include
#include
#include
#include
#include
#include
#include

/* Linux 的默任个人的邮箱地址是 /var/spool/mail/用户的登录名 */

#define MAIL "/var/spool/mail/hoyt"

/* 睡眠10秒钟 */

#define SLEEP_TIME 10

main(void)
{
pid_t child;

if((child=fork())==-1)
{
printf("Fork Error:%s\n",strerror(errno));
exit(1);
}
else if(child>0)
while(1);
if(kill(getppid(),SIGTERM)==-1)
{
printf("Kill Parent Error:%s\n",strerror(errno));
exit(1);
}
{
int mailfd;

while(1)
{
if((mailfd=open(MAIL,O_RDONLY))!=-1)
{
fprintf(stderr,"%s","\007");
close(mailfd);
}
sleep(SLEEP_TIME);
}
}
}

你可以在默认的路径下创建你的邮箱文件,然后测试一下这个程序.当然这个程序还有很多地方要改善的.我们后面会对这个小程序改善的,再看我的改善之前你可以尝试自己改善一下.比如让用户指定邮相的路径和睡眠时间等等.相信自己可以做到的.动手吧,勇敢的探险者.
好了进程一节的内容我们就先学到这里了.进程是一个非常重要的概念,许多的程序都会用子进程.创建一个子进程是每一个程序员的基本要求!

3. linux 关于文件读写的问题

1. 文件write操作是原子的,多个进程同时写文件,原理上是没问题的。但是问题会出现在:如果多个进程写文件时是先lseek再write,就会出现覆盖。打开文件时使用append标志可以使先lseek再write这个操作变成原子操作,这样可以避免覆盖。
2. 多线程共享一个文件句柄的话,是不会有问题的。
3.
4.linux读写磁盘文件过程中,一般情况下并不是直接操作磁盘上的文件,而是读写内存中的磁盘高速缓存,内核选择合适的时机把脏页同步到磁盘。所以读写文件时不立刻调用io不是因为你说的缓冲区,read和write是没有缓冲区的。
5. fprintf和printf一样,是有缓冲区的,不过大小我不知道,也没必要知道吧。

4. 在linux下,写一个c语言程序把一个文件的内容写入另一个文件中

#include<stdio.h>

main()

{

FILE*fi,*fo;

charc;

fi=fopen("input","r");

fo=fopen("output","w");

while(fscanf(fi,"%c",&c)!=EOF)

fprintf(fo,"%c",c);

fclose(fi);

fclose(fo);

}

5. 用linux c语言编写 为一个文件里面的内容的每一行添加一个指定的字符

1、基本思路:从第一个文本文件中用
fgets()
函数读出一行数据,对读出的每一链明搜行数据进行判断,如果需要在它的适当位置插入一行,把相应的新内容、以及该行的内容写到第二个文本文件中。如果槐猜不需要在该位置插入一行,那就直接将该行数据用
fprintf()
函数写入第二个文本文件中。
2、伪代码:
1.打开要修改的文件A,
2.创建一个临时文件B,
3.
while(没到达文件A末尾)
从A中读取一行,写到B中,然后写入要追加的内容,写入换行符
4.关闭文件A,关闭文件B,
5.删除文件A(用remove函数),重命名棚历B为A(用rename函数)

6. 求救!!如何在c语言中用fprintf函数输出txt文件

fprintf 简介 c/c++语言函数: fprintf 功 能 传送格式化输出到一个文件中 用 法 #include <stdio.h> int fprintf( FILE *stream, const char *format, ... ); fprintf()函数根据指定的format(格式)(格式)发送信息(参数)到由stream(流)指定的文件. fprintf()只能和printf()一样工作. fprintf()的返回值是输出的字符数,发生错误时返回一个负值. 返回值 成功时返回转换的字节数,失败时返回一个负数. 在LINUX/UNIX操系统中成功返回0,失败返回-1。并置errno值. 程序例 /* Program to create backup of the AUTOEXEC.BAT file */ #include <stdio.h> int main(void) { FILE *in, *out; if ((in = fopen("//AUTOEXEC.BAT", "rt")) == NULL) { fprintf(stderr, "Cannot open input file./n"); return 1; } if ((out = fopen("//AUTOEXEC.BAK", "wt")) == NULL) { fprintf(stderr, "Cannot open output file./n"); return 1; } while (!feof(in)) fputc(fgetc(in), out); fclose(in); fclose(out); return 0; } 举例用法: #include <stdio.h> #include <process.h> FILE *stream; void main( void ) { int i = 10; double fp = 1.5; char s[] = "this is a string"; char c = '/n'; stream = fopen( "fprintf.out", "w" ); fprintf( stream, "%s%c", s, c ); fprintf( stream, "%d/n", i ); fprintf( stream, "%f/n", fp ); fclose( stream ); system( "type fprintf.out" ); } 屏幕输出: this is a string 10 1.500000 格式化规定符 %d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e 指数形式的浮点数 %x, %X 无符号以十六进制表示的整数 %0 无符号以八进制表示的整数 %g 自动选择合适的表示法

7. Linux下C编程,实现每3秒输出一次时间,并且保存在文件中,程序运行有错误

结构体的大小不能简单认为就是成员的叠加..!!!

所以你fprintf(“%d”)并不是说数据存文本里面就占四个字节,只是用10进制打印出来,可能是1个字节,也可能是5个字节,你fprintf("%s"),虽然长度在实际上就是24+1个字节,但是结构体中组织数据是需要对齐的.. temp2[25]占用内存是28个字节,因为是32位机,数据一般会四个字节对齐...对一个字节也是这样..自己看看sizeof(struct shijian)的大小....

fprintf("%4d")
fprintf("%28s")
用格式输出保证这个10进制数字的字符串占4个字节,这个时间的字符串占28个字节
这样就把文本的数据组织的和结构体一样大了..

调试的时候看看到底读出了多少个字节...fread你可以把单元设置为1,这样就能自己看读出出多少个字节,fread给你算了你当然看不到细节...

#include<stdio.h>
#include<time.h>
#include<string.h>
int main(int argc,char *argv[])
{
time_t timep1;
struct shijian
{
int number;
char timep2[25];
};
FILE *fp=NULL;

if ((fp=fopen("1.txt","a+"))==NULL)
{
printf("can not open !");
return -1;
}

struct shijian shijian[200];
int i=1;
int rc;
while(i==1 && rc < 10000)//rc超出10000的话,程序就又会不对劲了...只给了4个位
{
rc=fread(shijian,sizeof(struct shijian),200,fp);
// fflush(fp);
shijian->number=rc+1;
// shijian->number=i;
// i=rc;
time(&timep1);
strcpy(shijian->timep2,ctime(&timep1));
printf("%d %s\n",shijian->number,shijian->timep2);
// fwrite(q->number,sizeof(q->number),1,fp);
// fflush(fp);
fprintf(fp,"%4d",shijian->number);fflush(fp);
fprintf(fp,"%28s",shijian->timep2);fflush(fp);
// fwrite(shijian->timep2,sizeof(shijian->timep2),1,fp);
rewind(fp);

sleep(3);
// fseek(fp,0,SEEK_SET);
// (shijian->number)++;

}
fclose(fp);
return 0;
}

热点内容
柳工挖机密码多少合适 发布:2024-05-17 11:00:40 浏览:187
android工程叹号 发布:2024-05-17 10:56:21 浏览:480
在苹果手机应用怎么比安卓贵 发布:2024-05-17 10:56:20 浏览:547
赛欧313配置怎么样 发布:2024-05-17 10:43:16 浏览:988
c语言预算 发布:2024-05-17 10:43:16 浏览:492
推荐对称加密算法 发布:2024-05-17 10:43:15 浏览:822
有存储功能计算器 发布:2024-05-17 10:42:34 浏览:118
小米账号密码保险箱在哪里 发布:2024-05-17 10:17:00 浏览:752
抖音引流脚本推荐 发布:2024-05-17 10:11:16 浏览:724
sql数据库数据路径 发布:2024-05-17 10:00:25 浏览:132