#include <stdio.h>
#include <pthread.h>
#include <string.h>
#include <unistd.h>
char buf[] = "1234567";
void* daozhi(void* arg)
{
int i;
int j = strlen(buf)-1;
while(1)
{
for(i=0;i<=j;i++,j--)
{
int temp = ((char*) arg)[i];
((char*)arg)[i] = ((char*)arg)[j];
((char*)arg)[j] = temp;
}
pthread_exit(NULL);
}
return arg;
}
int main(int argc, const char *argv[])
{
pthread_t A;
pthread_create(&A,NULL,daozhi,(void*)buf);
pthread_join(A,NULL);
while(1)
{
int i;
for(i=0;i<7;i++)
{
printf("%c",buf[i]);
}
printf("\n");
}
return 0;
}
错误原因:同一进程下的线程由于时间片的分配原因,导致微观上线程进行的先后顺序不能确定
#include<stdio.h>
#include<pthread.h>
#include<errno.h>
#include<unistd.h>
void* FUNC(void*n)
{
FILE* tp=fopen("./1.jpg","r");
FILE* tp1=fopen("2.jpg","a+");
fseek(tp,*(long*)n,SEEK_SET);
size_t tupian;
char msg;
while(1)
{
tupian=fread(&msg,1,sizeof(msg),tp);
fwrite(&msg,1,1,tp1);
if(tupian==0)
{
printf("完成\n");
break;
}
}
fclose(tp);
fclose(tp1);
return 0;
}
int main(int argc, const char *argv[])
{
FILE* tp3 =fopen("./1.jpg","r");
if(NULL==tp3)
{
perror("opentp");
return -1;
}
FILE* tp4 =fopen("2.jpg","w");
if(NULL==tp4)
{
perror("opentp1");
return -1;
}
long len;
fseek(tp3,0,SEEK_END);
len=ftell(tp3);
fseek(tp3,0,SEEK_SET);
char msg;
int qianban;
long n=0;
while(n<(len/2))
{
qianban=fscanf(tp3,"%c",&msg);
fprintf(tp4,"%c",msg);
if(qianban == EOF)
{
if(errno!=0)
{
perror("fscanfqianban");
return -1;
}
break;
}
n++;
}
fclose(tp3);
fclose(tp4);
pthread_t photo;
pthread_create(&photo,NULL,FUNC,(void*)&n);
pthread_join(photo,NULL);
return 0;
}