你说的这些API,自己man 一次,看看说明就知道用法了....
楼上说的对齐的问题,我没有太注意..不过,不管你要共享什么,一个sizeof看看大小,一个memcpy拷贝,你就作为数据直接拷贝到共享内存区域就OK了...另外一边再拷贝回来,用一个结构体类型的指针指向你拷贝回来的数据,不就给这部分内存再规划成一个结构体了。。
至于具体的, KEY 的含义,你需要了解linux的ipc机制。
#include<stdio.h>
#include<sys/ipc.h>
#include<sys/types.h>
#include<sys/shm.h>
#define BUF_SIZE 100
#define KEY 99
int main(void)
{
int shmid
char *shmptr
shmid=shmget(99,BUF_SIZE,IPC_CREAT|0666)
if(shmid==-1)
{
printf("Shared Memory Created error...\n")exit(0)
}
shmptr=shmat(shmid,NULL,0)
if(shmptr==(void*)-1)
{
printf("shmat error,shmptr= %d \n",shmptr)
exit(1)
}
while(1)
{
printf("type strings into Shared Memory:")
fgets(shmptr,BUF_SIZE,stdin)
}
return 0
}
下面这段就每隔10秒钟扫描共享内存区域的内容:
#include<stdio.h>
#include<sys/ipc.h>
#include<sys/types.h>
#include<sys/shm.h>
#define BUF_SIZE 100
#define KEY 99
int main(void)
{
int shmid
char *shmptr
shmid=shmget(99,BUF_SIZE,IPC_CREAT|0666)
if(shmid==-1)
{
printf("Shared Memory Created error...\n")exit(0)
}
shmptr=shmat(shmid,NULL,0)
if(shmptr==(void*)-1)
{
printf("shmat error,shmptr= %d \n",shmptr)
exit(1)
}
while(1)
{
printf("Infomation in Shared Memory:")
printf("%s \n",shmptr)
sleep(10)
}
return 0
}
下面是读取一个文件 并复制成新文件#include <string.h>
#include <strings.h>
#include <stdio.h>
#include <stdlib.h>
#define BUFFER_SIZE 1024
int main(int argc, char **argv)
{
FILE *from_fd
FILE *to_fd
long file_len = 0
char buffer[BUFFER_SIZE]
char *ptr
//判断传入参数
if(argc != 3)
{
printf("Usage: %s fromfile tofile", argv[0])
exit(1)//异常退出返回1
}
//打开原文件
if((from_fd = fopen(argv[1], "rb")) == NULL)
{
printf("Read %s Error\n", argv[1])
exit(1)
}
//创建目的文件
if((to_fd = fopen(argv[2], "wb")) == NULL)
{
printf("Write %s Error\n", argv[2])
exit(1)
}
//侧得文件大小
fseek(from_fd, 0L, SEEK_END)
file_len = ftell(from_fd)
fseek(from_fd, 0L, SEEK_SET)
printf("from file size is = %ld\n", file_len)
//进行文件拷贝
while(!feof(from_fd))
{
fread(buffer, BUFFER_SIZE, 1, from_fd)
//fread 为c标准库里函数 // read 为Linux系统调用, 返回成功读取了多少字节 出错则返回-1
if(BUFFER_SIZE >= file_len)
{
fwrite(buffer, file_len, 1, to_fd)
}
else
{
fwrite(buffer, BUFFER_SIZE, 1, to_fd)
file_len = file_len - BUFFER_SIZE
printf("copy success!\n")
}
bzero(buffer, BUFFER_SIZE)
}
fclose(from_fd)
fclose(to_fd)
exit(0)//返回0 表示成功
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)